OSDN Git Service

gpiolib: acpi: Respect bias settings for GpioInt() resource
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 9 Nov 2020 20:53:24 +0000 (22:53 +0200)
committerAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 16 Nov 2020 12:14:34 +0000 (14:14 +0200)
In some cases the GpioInt() resource is coming with bias settings
which may affect system functioning. Respect bias settings for
GpioInt() resource by calling acpi_gpio_update_gpiod_*flags() API
in acpi_dev_gpio_irq_get().

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

index 834a12f..3a39e8a 100644 (file)
@@ -942,6 +942,7 @@ int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index)
 
                if (info.gpioint && idx++ == index) {
                        unsigned long lflags = GPIO_LOOKUP_FLAGS_DEFAULT;
+                       enum gpiod_flags dflags = GPIOD_ASIS;
                        char label[32];
                        int irq;
 
@@ -952,8 +953,11 @@ int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index)
                        if (irq < 0)
                                return irq;
 
+                       acpi_gpio_update_gpiod_flags(&dflags, &info);
+                       acpi_gpio_update_gpiod_lookup_flags(&lflags, &info);
+
                        snprintf(label, sizeof(label), "GpioInt() %d", index);
-                       ret = gpiod_configure_flags(desc, label, lflags, info.flags);
+                       ret = gpiod_configure_flags(desc, label, lflags, dflags);
                        if (ret < 0)
                                return ret;