]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
gpiolib: add support for biasing output lines
authorKent Gibson <warthog618@gmail.com>
Tue, 5 Nov 2019 02:04:26 +0000 (10:04 +0800)
committerBartosz Golaszewski <bgolaszewski@baylibre.com>
Tue, 12 Nov 2019 15:30:30 +0000 (16:30 +0100)
Allow pull up/down bias to be set on output lines.
Use case is for open source or open drain applications where
internal pull up/down may conflict with external biasing.

Signed-off-by: Kent Gibson <warthog618@gmail.com>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
drivers/gpio/gpiolib.c

index 9969116603066669fe3ea4daf9bf800dfb2629bb..be159f56ff45281c3cc87ea6029ccc2248844d00 100644 (file)
@@ -556,8 +556,9 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)
             (lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE)))
                return -EINVAL;
 
-       /* Bias flags only allowed for input mode. */
-       if (!(lflags & GPIOHANDLE_REQUEST_INPUT) &&
+       /* Bias flags only allowed for input or output mode. */
+       if (!((lflags & GPIOHANDLE_REQUEST_INPUT) ||
+             (lflags & GPIOHANDLE_REQUEST_OUTPUT)) &&
            ((lflags & GPIOHANDLE_REQUEST_BIAS_DISABLE) ||
             (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP) ||
             (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN)))
@@ -3169,6 +3170,9 @@ int gpiod_direction_output(struct gpio_desc *desc, int value)
        }
 
 set_output_value:
+       ret = gpio_set_bias(gc, desc);
+       if (ret)
+               return ret;
        return gpiod_direction_output_raw_commit(desc, value);
 
 set_output_flag: