• Tony Lindgren's avatar
    Input: gpio-keys - add system suspend support for dedicated wakeirqs · 3717194f
    Tony Lindgren authored
    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: default avatarDhruva Gole <d-gole@ti.com>
    Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
    Link: https://lore.kernel.org/r/20231129110618.27551-2-tony@atomide.comSigned-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
    3717194f
gpio_keys.c 27.9 KB