aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/generic/gpio_keys/chip.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/generic/gpio_keys/chip.h')
-rw-r--r--src/drivers/generic/gpio_keys/chip.h28
1 files changed, 26 insertions, 2 deletions
diff --git a/src/drivers/generic/gpio_keys/chip.h b/src/drivers/generic/gpio_keys/chip.h
index 7bc5007df3..a2ff59dc73 100644
--- a/src/drivers/generic/gpio_keys/chip.h
+++ b/src/drivers/generic/gpio_keys/chip.h
@@ -24,6 +24,28 @@ enum {
EV_ACT_DEASSERTED,
};
+enum {
+ /*
+ * GPIO key uses SCI route to wake the system from suspend state. This is typically used
+ * when the input line is dual routed i.e. one for IRQ and other for SCI or if the GPIO
+ * controller is capable of handling the filtering for IRQ and SCI separately. This
+ * requires "wake" property to be provided by the board which represents the GPE # for
+ * wake. It is exposed as _PRW in ACPI tables.
+ */
+ WAKEUP_ROUTE_SCI,
+ /*
+ * GPIO key uses GPIO controller IRQ route for wake. This is used when IRQ and wake are
+ * routed to the same pad and the GPIO controller is not capable of handling the trigger
+ * filtering separately for IRQ and wake. Kernel driver for gpio-keys takes care of
+ * reconfiguring the IRQ trigger as both edges when used in S0 and the edge requested by
+ * BIOS (as per wakeup_event_action) when entering suspend. In this case, _PRW is not
+ * exposed for the key device.
+ */
+ WAKEUP_ROUTE_GPIO_IRQ,
+ /* GPIO key does not support wake. */
+ WAKEUP_ROUTE_DISABLED,
+};
+
/* Details of the child node defining key */
struct key_info {
/* Device name of the child node - Mandatory */
@@ -37,8 +59,10 @@ struct key_info {
uint32_t linux_input_type;
/* Descriptive name of the key */
const char *label;
- /* Wake GPE */
- unsigned int wake;
+ /* Wakeup route (if any) for the key. See WAKEUP_ROUTE_* macros above. */
+ unsigned int wakeup_route;
+ /* Wake GPE -- SCI GPE # for wake. Required for WAKEUP_ROUTE_SCI. */
+ unsigned int wake_gpe;
/* Trigger for Wakeup Event Action as defined in EV_ACT_* enum */
unsigned int wakeup_event_action;
/* Can this key be disabled? */