|
@@ -459,6 +459,15 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)
|
|
|
if (lflags & ~GPIOHANDLE_REQUEST_VALID_FLAGS)
|
|
|
return -EINVAL;
|
|
|
|
|
|
+ /*
|
|
|
+ * Do not allow OPEN_SOURCE & OPEN_DRAIN flags in a single request. If
|
|
|
+ * the hardware actually supports enabling both at the same time the
|
|
|
+ * electrical result would be disastrous.
|
|
|
+ */
|
|
|
+ if ((lflags & GPIOHANDLE_REQUEST_OPEN_DRAIN) &&
|
|
|
+ (lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE))
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
/* OPEN_DRAIN and OPEN_SOURCE flags only make sense for output mode. */
|
|
|
if (!(lflags & GPIOHANDLE_REQUEST_OUTPUT) &&
|
|
|
((lflags & GPIOHANDLE_REQUEST_OPEN_DRAIN) ||
|