@@ -554,6 +554,12 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)
(lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE)))
return -EINVAL;
+ /* PULL_UP and PULL_DOWN flags only make sense for input mode. */
+ if (!(lflags & GPIOHANDLE_REQUEST_INPUT) &&
+ ((lflags & GPIOHANDLE_REQUEST_PULL_UP) ||
+ (lflags & GPIOHANDLE_REQUEST_PULL_DOWN)))
+ return -EINVAL;
+
lh = kzalloc(sizeof(*lh), GFP_KERNEL);
if (!lh)
return -ENOMEM;
@@ -944,6 +950,10 @@ static int lineevent_create(struct gpio_device *gdev, void __user *ip)
if (lflags & GPIOHANDLE_REQUEST_ACTIVE_LOW)
set_bit(FLAG_ACTIVE_LOW, &desc->flags);
+ if (lflags & GPIOHANDLE_REQUEST_PULL_DOWN)
+ set_bit(FLAG_PULL_DOWN, &desc->flags);
+ if (lflags & GPIOHANDLE_REQUEST_PULL_UP)
+ set_bit(FLAG_PULL_UP, &desc->flags);
ret = gpiod_direction_input(desc);
if (ret)
This patch adds support for pull up/down to lineevent_create. Use cases include receiving asynchronous presses from a push button without an external pull up/down. The patch also restricts the application of bias to lines explicitly requested as inputs to prevent bias being applied to as-is line requests. Signed-off-by: Kent Gibson <warthog618@gmail.com> --- drivers/gpio/gpiolib.c | 10 ++++++++++ 1 file changed, 10 insertions(+)