]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
gpiolib: acpi: Set pin value, based on bias, more accurately
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Wed, 10 Apr 2019 15:39:19 +0000 (18:39 +0300)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 23 Apr 2019 08:55:17 +0000 (10:55 +0200)
ACPI GpioIo() resource may have different bias settings.
For now, we distinguish only PullUp() setting in order to configure
the initial state of a pin.

Take into consideration the rest of the possible choices as well,
i.e. PullDown, PullNone and PullDefault, when configuring the initial state
of the pin.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpiolib-acpi.c

index 36cd9abe5e555d75eb19c2d647692d69b05d62fe..878c7a7dea8b2dc841327de02ea0c232a01afeda 100644 (file)
@@ -444,8 +444,6 @@ static bool acpi_get_driver_gpio_data(struct acpi_device *adev,
 static enum gpiod_flags
 acpi_gpio_to_gpiod_flags(const struct acpi_resource_gpio *agpio)
 {
-       bool pull_up = agpio->pin_config == ACPI_PIN_CONFIG_PULLUP;
-
        switch (agpio->io_restriction) {
        case ACPI_IO_RESTRICT_INPUT:
                return GPIOD_IN;
@@ -454,16 +452,26 @@ acpi_gpio_to_gpiod_flags(const struct acpi_resource_gpio *agpio)
                 * ACPI GPIO resources don't contain an initial value for the
                 * GPIO. Therefore we deduce that value from the pull field
                 * instead. If the pin is pulled up we assume default to be
-                * high, otherwise low.
+                * high, if it is pulled down we assume default to be low,
+                * otherwise we leave pin untouched.
                 */
-               return pull_up ? GPIOD_OUT_HIGH : GPIOD_OUT_LOW;
+               switch (agpio->pin_config) {
+               case ACPI_PIN_CONFIG_PULLUP:
+                       return GPIOD_OUT_HIGH;
+               case ACPI_PIN_CONFIG_PULLDOWN:
+                       return GPIOD_OUT_LOW;
+               default:
+                       break;
+               }
        default:
-               /*
-                * Assume that the BIOS has configured the direction and pull
-                * accordingly.
-                */
-               return GPIOD_ASIS;
+               break;
        }
+
+       /*
+        * Assume that the BIOS has configured the direction and pull
+        * accordingly.
+        */
+       return GPIOD_ASIS;
 }
 
 static int