Commit 8ff4fb27 authored by Mario Limonciello's avatar Mario Limonciello Committed by Linus Walleij
Browse files

pinctrl: amd: Clear GPIO debounce for suspend

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: 5c4fa2a6 ("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: default avatarMario Limonciello <mario.limonciello@amd.com>
Reviewed-by: default avatarHans de Goede <hansg@kernel.org>
Link: https://lore.kernel.org/20250627150155.3311574-1-superm1@kernel.org


Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 46147490
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -979,6 +979,17 @@ static int amd_gpio_suspend_hibernate_common(struct device *dev, bool is_suspend
				  pin, is_suspend ? "suspend" : "hibernate");
		}

		/*
		 * debounce enabled over suspend has shown issues with a GPIO
		 * being unable to wake the system, as we're only interested in
		 * the actual wakeup event, clear it.
		 */
		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);
	}