aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/include/linux/gpio_keys.h
diff options
context:
space:
mode:
authorTony Lindgren <tony@atomide.com>2023-11-29 13:06:15 +0200
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2023-11-30 12:06:55 -0800
commit3717194f249227a3dfd8433bd9374cc7e0cf823d (patch)
tree08aa6898e873b2cd33a1ecaf1e09e3807951b0f3 /include/linux/gpio_keys.h
parentdt-bindings: input: gpio-keys: Allow optional dedicated wakeirq (diff)
downloadwireguard-linux-3717194f249227a3dfd8433bd9374cc7e0cf823d.tar.xz
wireguard-linux-3717194f249227a3dfd8433bd9374cc7e0cf823d.zip
Input: gpio-keys - add system suspend support for dedicated wakeirqs
Some SoCs have a separate dedicated wake-up interrupt controller that can be used to wake up the system from deeper idle states. We already support configuring a separate interrupt for a gpio-keys button to be used with a gpio line. However, we are lacking support system suspend for cases where a separate interrupt needs to be used in deeper sleep modes. Because of it's nature, gpio-keys does not know about the runtime PM state of the button gpios, and may have several gpio buttons configured for each gpio-keys device instance. Implementing runtime PM support for gpio-keys does not help, and we cannot use drivers/base/power/wakeirq.c support. We need to implement custom wakeirq support for gpio-keys. For handling a dedicated wakeirq for system suspend, we enable and disable it with gpio_keys_enable_wakeup() and gpio_keys_disable_wakeup() that we already use based on device_may_wakeup(). Some systems may have a dedicated wakeirq that can also be used as the main interrupt, this is already working for gpio-keys. Let's add some wakeirq related comments while at it as the usage with a gpio line and separate interrupt line may not be obvious. Tested-by: Dhruva Gole <d-gole@ti.com> Signed-off-by: Tony Lindgren <tony@atomide.com> Link: https://lore.kernel.org/r/20231129110618.27551-2-tony@atomide.com Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Diffstat (limited to 'include/linux/gpio_keys.h')
-rw-r--r--include/linux/gpio_keys.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/include/linux/gpio_keys.h b/include/linux/gpio_keys.h
index 3f84aeb81e48..80fa930b04c6 100644
--- a/include/linux/gpio_keys.h
+++ b/include/linux/gpio_keys.h
@@ -21,6 +21,7 @@ struct device;
* disable button via sysfs
* @value: axis value for %EV_ABS
* @irq: Irq number in case of interrupt keys
+ * @wakeirq: Optional dedicated wake-up interrupt
*/
struct gpio_keys_button {
unsigned int code;
@@ -34,6 +35,7 @@ struct gpio_keys_button {
bool can_disable;
int value;
unsigned int irq;
+ unsigned int wakeirq;
};
/**