gpiolib: add support for bias pull disable
authorNuno Sá <nuno.sa@analog.com>
Wed, 13 Jul 2022 13:14:18 +0000 (15:14 +0200)
committerBartosz Golaszewski <brgl@bgdev.pl>
Tue, 19 Jul 2022 08:23:54 +0000 (10:23 +0200)
This change prepares the gpio core to look at firmware flags and set
'FLAG_BIAS_DISABLE' if necessary. It works in similar way to
'GPIO_PULL_DOWN' and 'GPIO_PULL_UP'.

Signed-off-by: Nuno Sá <nuno.sa@analog.com>
Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
drivers/gpio/gpiolib.c
include/linux/gpio/machine.h

index 9535f48..0692ec8 100644 (file)
@@ -3945,9 +3945,11 @@ int gpiod_configure_flags(struct gpio_desc *desc, const char *con_id,
        if (lflags & GPIO_OPEN_SOURCE)
                set_bit(FLAG_OPEN_SOURCE, &desc->flags);
 
-       if ((lflags & GPIO_PULL_UP) && (lflags & GPIO_PULL_DOWN)) {
+       if (((lflags & GPIO_PULL_UP) && (lflags & GPIO_PULL_DOWN)) ||
+           ((lflags & GPIO_PULL_UP) && (lflags & GPIO_PULL_DISABLE)) ||
+           ((lflags & GPIO_PULL_DOWN) && (lflags & GPIO_PULL_DISABLE))) {
                gpiod_err(desc,
-                         "both pull-up and pull-down enabled, invalid configuration\n");
+                         "multiple pull-up, pull-down or pull-disable enabled, invalid configuration\n");
                return -EINVAL;
        }
 
@@ -3955,6 +3957,8 @@ int gpiod_configure_flags(struct gpio_desc *desc, const char *con_id,
                set_bit(FLAG_PULL_UP, &desc->flags);
        else if (lflags & GPIO_PULL_DOWN)
                set_bit(FLAG_PULL_DOWN, &desc->flags);
+       else if (lflags & GPIO_PULL_DISABLE)
+               set_bit(FLAG_BIAS_DISABLE, &desc->flags);
 
        ret = gpiod_set_transitory(desc, (lflags & GPIO_TRANSITORY));
        if (ret < 0)
index 4d55da2..0b619eb 100644 (file)
@@ -14,6 +14,7 @@ enum gpio_lookup_flags {
        GPIO_TRANSITORY                 = (1 << 3),
        GPIO_PULL_UP                    = (1 << 4),
        GPIO_PULL_DOWN                  = (1 << 5),
+       GPIO_PULL_DISABLE               = (1 << 6),
 
        GPIO_LOOKUP_FLAGS_DEFAULT       = GPIO_ACTIVE_HIGH | GPIO_PERSISTENT,
 };