* [PATCH v3] gpiolib: acpi: Program debounce when finding GPIO
@ 2025-08-11 16:43 Mario Limonciello (AMD)
2025-08-11 20:42 ` Andy Shevchenko
0 siblings, 1 reply; 3+ messages in thread
From: Mario Limonciello (AMD) @ 2025-08-11 16:43 UTC (permalink / raw)
To: Hans de Goede, Mika Westerberg, Andy Shevchenko, Linus Walleij,
Bartosz Golaszewski
Cc: open list:GPIO ACPI SUPPORT, open list:GPIO ACPI SUPPORT,
open list:INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCHSCREEN)...,
Mario Limonciello
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.
As this is considered non fatal if it fails, introduce a helper for
programming debounce and show a warning when failing to program.
Reviewed-by: Hans de Goede <hansg@kernel.org>
Signed-off-by: Mario Limonciello (AMD) <superm1@kernel.org>
---
v3:
* squash patches 1 and 2 together and drop the extra fatal hunk
v2:
* https://lore.kernel.org/all/20250625181342.3175969-1-superm1@kernel.org/
---
drivers/gpio/gpiolib-acpi-core.c | 25 ++++++++++++++-----------
1 file changed, 14 insertions(+), 11 deletions(-)
diff --git a/drivers/gpio/gpiolib-acpi-core.c b/drivers/gpio/gpiolib-acpi-core.c
index 12b24a717e43..15222bfc25bb 100644
--- a/drivers/gpio/gpiolib-acpi-core.c
+++ b/drivers/gpio/gpiolib-acpi-core.c
@@ -291,6 +291,17 @@ acpi_gpio_to_gpiod_flags(const struct acpi_resource_gpio *agpio, int polarity)
return GPIOD_ASIS;
}
+static void acpi_set_debounce_timeout(struct gpio_desc *desc, unsigned int timeout)
+{
+ int ret;
+
+ /* ACPI uses hundredths of milliseconds units */
+ ret = gpio_set_debounce_timeout(desc, timeout * 10);
+ if (ret)
+ dev_warn(&desc->gdev->dev,
+ "Failed to set debounce-timeout: %d\n", ret);
+}
+
static struct gpio_desc *acpi_request_own_gpiod(struct gpio_chip *chip,
struct acpi_resource_gpio *agpio,
unsigned int index,
@@ -300,18 +311,12 @@ static struct gpio_desc *acpi_request_own_gpiod(struct gpio_chip *chip,
enum gpiod_flags flags = acpi_gpio_to_gpiod_flags(agpio, polarity);
unsigned int pin = agpio->pin_table[index];
struct gpio_desc *desc;
- int ret;
desc = gpiochip_request_own_desc(chip, pin, label, polarity, flags);
if (IS_ERR(desc))
return desc;
- /* ACPI uses hundredths of milliseconds units */
- ret = gpio_set_debounce_timeout(desc, agpio->debounce_timeout * 10);
- if (ret)
- dev_warn(chip->parent,
- "Failed to set debounce-timeout for pin 0x%04X, err %d\n",
- pin, ret);
+ acpi_set_debounce_timeout(desc, agpio->debounce_timeout);
return desc;
}
@@ -957,6 +962,7 @@ 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_set_debounce_timeout(desc, info.debounce);
return desc;
}
@@ -1025,10 +1031,7 @@ int acpi_dev_gpio_irq_wake_get_by(struct acpi_device *adev, const char *con_id,
if (ret < 0)
return ret;
- /* ACPI uses hundredths of milliseconds units */
- ret = gpio_set_debounce_timeout(desc, info.debounce * 10);
- if (ret)
- return ret;
+ acpi_set_debounce_timeout(desc, info.debounce);
irq_flags = acpi_dev_get_irq_type(info.triggering,
info.polarity);
base-commit: 8f5ae30d69d7543eee0d70083daf4de8fe15d585
--
2.50.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v3] gpiolib: acpi: Program debounce when finding GPIO
2025-08-11 16:43 [PATCH v3] gpiolib: acpi: Program debounce when finding GPIO Mario Limonciello (AMD)
@ 2025-08-11 20:42 ` Andy Shevchenko
2025-08-11 21:06 ` Mario Limonciello
0 siblings, 1 reply; 3+ messages in thread
From: Andy Shevchenko @ 2025-08-11 20:42 UTC (permalink / raw)
To: Mario Limonciello (AMD)
Cc: Hans de Goede, Mika Westerberg, Linus Walleij,
Bartosz Golaszewski, open list:GPIO ACPI SUPPORT,
open list:GPIO ACPI SUPPORT,
open list:INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCHSCREEN)...
On Mon, Aug 11, 2025 at 11:43:56AM -0500, Mario Limonciello (AMD) wrote:
> 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.
>
> As this is considered non fatal if it fails, introduce a helper for
> programming debounce and show a warning when failing to program.
I think I already commented on this previously. Let me do that below anyway.
...
> +static void acpi_set_debounce_timeout(struct gpio_desc *desc, unsigned int timeout)
> +{
> + int ret;
> +
> + /* ACPI uses hundredths of milliseconds units */
> + ret = gpio_set_debounce_timeout(desc, timeout * 10);
> + if (ret)
> + dev_warn(&desc->gdev->dev,
> + "Failed to set debounce-timeout: %d\n", ret);
> +}
I would make it still return the code to the caller. See below why.
...
> - /* ACPI uses hundredths of milliseconds units */
> - ret = gpio_set_debounce_timeout(desc, info.debounce * 10);
> - if (ret)
> - return ret;
> + acpi_set_debounce_timeout(desc, info.debounce);
The commit message fails to explain why we do relax the condition here. This is
about GpioInt() resource and so far I haven't heard about misused debounce
values there. If we drop the fatality, it has to be a separate patch explaining
why. But only if we have practical use cases. AS long as there no failed
platforms, I can't agree on this piece of change.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v3] gpiolib: acpi: Program debounce when finding GPIO
2025-08-11 20:42 ` Andy Shevchenko
@ 2025-08-11 21:06 ` Mario Limonciello
0 siblings, 0 replies; 3+ messages in thread
From: Mario Limonciello @ 2025-08-11 21:06 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Hans de Goede, Mika Westerberg, Linus Walleij,
Bartosz Golaszewski, open list:GPIO ACPI SUPPORT,
open list:GPIO ACPI SUPPORT,
open list:INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCHSCREEN)...
On 8/11/25 3:42 PM, Andy Shevchenko wrote:
> On Mon, Aug 11, 2025 at 11:43:56AM -0500, Mario Limonciello (AMD) wrote:
>> 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.
>>
>> As this is considered non fatal if it fails, introduce a helper for
>> programming debounce and show a warning when failing to program.
>
> I think I already commented on this previously. Let me do that below anyway.
>
> ...
>
>
>> +static void acpi_set_debounce_timeout(struct gpio_desc *desc, unsigned int timeout)
>> +{
>> + int ret;
>> +
>> + /* ACPI uses hundredths of milliseconds units */
>> + ret = gpio_set_debounce_timeout(desc, timeout * 10);
>> + if (ret)
>> + dev_warn(&desc->gdev->dev,
>> + "Failed to set debounce-timeout: %d\n", ret);
>> +}
>
> I would make it still return the code to the caller. See below why.
>
>
> ...
>
>> - /* ACPI uses hundredths of milliseconds units */
>> - ret = gpio_set_debounce_timeout(desc, info.debounce * 10);
>> - if (ret)
>> - return ret;
>> + acpi_set_debounce_timeout(desc, info.debounce);
>
> The commit message fails to explain why we do relax the condition here. This is
> about GpioInt() resource and so far I haven't heard about misused debounce
> values there. If we drop the fatality, it has to be a separate patch explaining
> why. But only if we have practical use cases. AS long as there no failed
> platforms, I can't agree on this piece of change.
>
Thanks for the feedback. I thought that I got your feedback the first
time when I originally squashed, but I must have failed.
In that case I don't think we really need a helper at all. I'll change
it for v4 to just add the extra call without the use of a helper.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-08-11 21:06 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-11 16:43 [PATCH v3] gpiolib: acpi: Program debounce when finding GPIO Mario Limonciello (AMD)
2025-08-11 20:42 ` Andy Shevchenko
2025-08-11 21:06 ` Mario Limonciello
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).