* [PATCH] pinctrl: amd: Clear GPIO debounce for suspend
@ 2025-06-26 22:14 Mario Limonciello
2025-06-27 8:04 ` Hans de Goede
0 siblings, 1 reply; 3+ messages in thread
From: Mario Limonciello @ 2025-06-26 22:14 UTC (permalink / raw)
To: mario.limonciello, Basavaraj.Natikar, Shyam-sundar.S-k,
linus.walleij, dmitry.torokhov, hansg
Cc: linux-gpio
From: Mario Limonciello <mario.limonciello@amd.com>
soc-button-array hardcodes a debounce value by means of gpio_keys
which uses pinctrl-amd as a backend to program debounce for a GPIO.
This hardcoded value doesn't match what the firmware intended to be
programmed in _AEI. The hardcoded debounce leads to problems waking
from suspend. There isn't appetite to conditionalize the behavior in
soc-button-array or gpio-keys so clear it when the system suspends to
avoid problems with being able to resume.
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Hans de Goede <hansg@kernel.org>
Fixes: 5c4fa2a6da7fb ("Input: soc_button_array - debounce the buttons")
Link: https://lore.kernel.org/linux-input/mkgtrb5gt7miyg6kvqdlbu4nj3elym6ijudobpdi26gp4xxay5@rsa6ytrjvj2q/
Link: https://lore.kernel.org/linux-input/20250625215813.3477840-1-superm1@kernel.org/
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
drivers/pinctrl/pinctrl-amd.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/pinctrl/pinctrl-amd.c b/drivers/pinctrl/pinctrl-amd.c
index 5cf3db6d78b79..4276bbe77e0e9 100644
--- a/drivers/pinctrl/pinctrl-amd.c
+++ b/drivers/pinctrl/pinctrl-amd.c
@@ -979,6 +979,13 @@ static int amd_gpio_suspend_hibernate_common(struct device *dev, bool is_suspend
pin, is_suspend ? "suspend" : "hibernate");
}
+ /* clear debounce */
+ if (gpio_dev->saved_regs[i] & (DB_CNTRl_MASK << DB_CNTRL_OFF)) {
+ amd_gpio_set_debounce(gpio_dev, pin, 0);
+ pm_pr_dbg("Clearing debounce for GPIO #%d during %s.\n",
+ pin, is_suspend ? "suspend" : "hibernate");
+ }
+
raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] pinctrl: amd: Clear GPIO debounce for suspend
2025-06-26 22:14 [PATCH] pinctrl: amd: Clear GPIO debounce for suspend Mario Limonciello
@ 2025-06-27 8:04 ` Hans de Goede
2025-06-27 14:45 ` Mario Limonciello
0 siblings, 1 reply; 3+ messages in thread
From: Hans de Goede @ 2025-06-27 8:04 UTC (permalink / raw)
To: Mario Limonciello, mario.limonciello, Basavaraj.Natikar,
Shyam-sundar.S-k, linus.walleij, dmitry.torokhov
Cc: linux-gpio
Hi Mario,
On 27-Jun-25 12:14 AM, Mario Limonciello wrote:
> From: Mario Limonciello <mario.limonciello@amd.com>
>
> soc-button-array hardcodes a debounce value by means of gpio_keys
> which uses pinctrl-amd as a backend to program debounce for a GPIO.
>
> This hardcoded value doesn't match what the firmware intended to be
> programmed in _AEI. The hardcoded debounce leads to problems waking
> from suspend. There isn't appetite to conditionalize the behavior in
> soc-button-array or gpio-keys so clear it when the system suspends to
> avoid problems with being able to resume.
Nice I do think this is a better solution then disabling hw-debounce
in soc-button-array as we did before.
> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Cc: Hans de Goede <hansg@kernel.org>
> Fixes: 5c4fa2a6da7fb ("Input: soc_button_array - debounce the buttons")
> Link: https://lore.kernel.org/linux-input/mkgtrb5gt7miyg6kvqdlbu4nj3elym6ijudobpdi26gp4xxay5@rsa6ytrjvj2q/
> Link: https://lore.kernel.org/linux-input/20250625215813.3477840-1-superm1@kernel.org/
> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
> ---
> drivers/pinctrl/pinctrl-amd.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/drivers/pinctrl/pinctrl-amd.c b/drivers/pinctrl/pinctrl-amd.c
> index 5cf3db6d78b79..4276bbe77e0e9 100644
> --- a/drivers/pinctrl/pinctrl-amd.c
> +++ b/drivers/pinctrl/pinctrl-amd.c
> @@ -979,6 +979,13 @@ static int amd_gpio_suspend_hibernate_common(struct device *dev, bool is_suspend
> pin, is_suspend ? "suspend" : "hibernate");
> }
>
> + /* clear debounce */
> + if (gpio_dev->saved_regs[i] & (DB_CNTRl_MASK << DB_CNTRL_OFF)) {
> + amd_gpio_set_debounce(gpio_dev, pin, 0);
> + pm_pr_dbg("Clearing debounce for GPIO #%d during %s.\n",
> + pin, is_suspend ? "suspend" : "hibernate");
> + }
> +
I notice that the if () { } block above this checks if a pin is not configured
to be a wakeup src. Since we only need this for wakeup sources maybe put this
in an else block of the if () { } block above this ?
I've not strong preference for doing this change, just something which I noticed
while looking at the code.
Either way this should probably have a comment on why the clearing is done here.
Regards,
Hans
> raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
> }
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] pinctrl: amd: Clear GPIO debounce for suspend
2025-06-27 8:04 ` Hans de Goede
@ 2025-06-27 14:45 ` Mario Limonciello
0 siblings, 0 replies; 3+ messages in thread
From: Mario Limonciello @ 2025-06-27 14:45 UTC (permalink / raw)
To: Hans de Goede, mario.limonciello, Basavaraj.Natikar,
Shyam-sundar.S-k, linus.walleij, dmitry.torokhov
Cc: linux-gpio
On 6/27/2025 3:04 AM, Hans de Goede wrote:
> Hi Mario,
>
> On 27-Jun-25 12:14 AM, Mario Limonciello wrote:
>> From: Mario Limonciello <mario.limonciello@amd.com>
>>
>> soc-button-array hardcodes a debounce value by means of gpio_keys
>> which uses pinctrl-amd as a backend to program debounce for a GPIO.
>>
>> This hardcoded value doesn't match what the firmware intended to be
>> programmed in _AEI. The hardcoded debounce leads to problems waking
>> from suspend. There isn't appetite to conditionalize the behavior in
>> soc-button-array or gpio-keys so clear it when the system suspends to
>> avoid problems with being able to resume.
>
> Nice I do think this is a better solution then disabling hw-debounce
> in soc-button-array as we did before.
Although it helps this issue and should be harmless I intend to land it
I do want to note we still have a difference in behavior for Windows and
Linux in that Windows never programs the hardware debounce for the
ACPI0011 device.
I think we should still consider a way to keep compatibility of behavior
(my previous v3 3/4 seemed to do that just fine).
>
>> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
>> Cc: Hans de Goede <hansg@kernel.org>
>> Fixes: 5c4fa2a6da7fb ("Input: soc_button_array - debounce the buttons")
>> Link: https://lore.kernel.org/linux-input/mkgtrb5gt7miyg6kvqdlbu4nj3elym6ijudobpdi26gp4xxay5@rsa6ytrjvj2q/
>> Link: https://lore.kernel.org/linux-input/20250625215813.3477840-1-superm1@kernel.org/
>> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
>> ---
>> drivers/pinctrl/pinctrl-amd.c | 7 +++++++
>> 1 file changed, 7 insertions(+)
>>
>> diff --git a/drivers/pinctrl/pinctrl-amd.c b/drivers/pinctrl/pinctrl-amd.c
>> index 5cf3db6d78b79..4276bbe77e0e9 100644
>> --- a/drivers/pinctrl/pinctrl-amd.c
>> +++ b/drivers/pinctrl/pinctrl-amd.c
>> @@ -979,6 +979,13 @@ static int amd_gpio_suspend_hibernate_common(struct device *dev, bool is_suspend
>> pin, is_suspend ? "suspend" : "hibernate");
>> }
>>
>> + /* clear debounce */
>> + if (gpio_dev->saved_regs[i] & (DB_CNTRl_MASK << DB_CNTRL_OFF)) {
>> + amd_gpio_set_debounce(gpio_dev, pin, 0);
>> + pm_pr_dbg("Clearing debounce for GPIO #%d during %s.\n",
>> + pin, is_suspend ? "suspend" : "hibernate");
>> + }
>> +
>
>
> I notice that the if () { } block above this checks if a pin is not configured
> to be a wakeup src. Since we only need this for wakeup sources maybe put this
> in an else block of the if () { } block above this ?
>
> I've not strong preference for doing this change, just something which I noticed
> while looking at the code.
>
> Either way this should probably have a comment on why the clearing is done here.
I'll respin with an updated comment. I would rather keep the blocks
separate so it's clearer in debug logs when multiple workarounds are
enacted.
>
> Regards,
>
> Hans
>
>
>
>> raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
>> }
>>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-06-27 14:46 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-26 22:14 [PATCH] pinctrl: amd: Clear GPIO debounce for suspend Mario Limonciello
2025-06-27 8:04 ` Hans de Goede
2025-06-27 14:45 ` 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).