]> www.infradead.org Git - users/hch/misc.git/commitdiff
gpiolib: acpi: Program debounce when finding GPIO
authorMario Limonciello (AMD) <superm1@kernel.org>
Wed, 20 Aug 2025 23:33:11 +0000 (18:33 -0500)
committerAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Thu, 21 Aug 2025 09:40:42 +0000 (11:40 +0200)
When soc-button-array looks up the GPIO to use it calls acpi_find_gpio()
which will parse _CRS.

acpi_find_gpio.cold (drivers/gpio/gpiolib-acpi-core.c:953)
gpiod_find_and_request (drivers/gpio/gpiolib.c:4598 drivers/gpio/gpiolib.c:4625)
gpiod_get_index (drivers/gpio/gpiolib.c:4877)

The GPIO is setup basically, but the debounce information is discarded.
The platform will assert what debounce should be in _CRS, so program it
at the time it's available.

Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Mario Limonciello (AMD) <superm1@kernel.org>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
drivers/gpio/gpiolib-acpi-core.c

index 12b24a717e43f17621c054bfc4e9c2e287236d8c..e81a29902bb2746940e7d752a6cf3449b5a88dc7 100644 (file)
@@ -944,6 +944,7 @@ struct gpio_desc *acpi_find_gpio(struct fwnode_handle *fwnode,
        bool can_fallback = acpi_can_fallback_to_crs(adev, con_id);
        struct acpi_gpio_info info;
        struct gpio_desc *desc;
+       int ret;
 
        desc = __acpi_find_gpio(fwnode, con_id, idx, can_fallback, &info);
        if (IS_ERR(desc))
@@ -957,6 +958,12 @@ struct gpio_desc *acpi_find_gpio(struct fwnode_handle *fwnode,
 
        acpi_gpio_update_gpiod_flags(dflags, &info);
        acpi_gpio_update_gpiod_lookup_flags(lookupflags, &info);
+
+       /* ACPI uses hundredths of milliseconds units */
+       ret = gpio_set_debounce_timeout(desc, info.debounce * 10);
+       if (ret)
+               return ERR_PTR(ret);
+
        return desc;
 }