Added SW_MUTE_DEVICE event type for mic mute switch. BUG=b:184593945 BRANCH=puff TEST=build image and verify with evtest on puff: /dev/input/event3: mic_mute_switch UI event_device_info receives the proper name. Change-Id: I09c52dc3df63e266c73741b102a22f8a2b896791 Signed-off-by: Ben Zhang <benzh@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/54689 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
91 lines
2.7 KiB
C
91 lines
2.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
|
|
#ifndef __DRIVERS_GENERIC_GPIO_KEYS_H__
|
|
#define __DRIVERS_GENERIC_GPIO_KEYS_H__
|
|
|
|
#include <acpi/acpi_device.h>
|
|
#include <stdint.h>
|
|
|
|
/* Linux input type */
|
|
enum {
|
|
/* Switch event */
|
|
EV_SW = 0x5,
|
|
};
|
|
|
|
/* Switch events type (Linux code emitted for EV_SW) */
|
|
enum {
|
|
SW_MUTE_DEVICE = 0xe,
|
|
SW_PEN_INSERTED = 0xf,
|
|
};
|
|
|
|
/* Trigger for wakeup event action */
|
|
enum {
|
|
EV_ACT_ANY,
|
|
EV_ACT_ASSERTED,
|
|
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 */
|
|
const char *dev_name;
|
|
/* Keycode emitted for this key - Mandatory */
|
|
uint32_t linux_code;
|
|
/*
|
|
* Event type generated for this key
|
|
* See EV_* above.
|
|
*/
|
|
uint32_t linux_input_type;
|
|
/* Descriptive name of the key */
|
|
const char *label;
|
|
/* 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? */
|
|
bool can_be_disabled;
|
|
/* Debounce interval time in milliseconds */
|
|
uint32_t debounce_interval;
|
|
};
|
|
|
|
struct drivers_generic_gpio_keys_config {
|
|
/* Device name of the parent gpio-keys node */
|
|
const char *name;
|
|
/* Name of the input device - Optional */
|
|
const char *label;
|
|
/* GPIO line providing the key - Mandatory */
|
|
struct acpi_gpio gpio;
|
|
/* Is this a polled GPIO button? - Optional */
|
|
bool is_polled;
|
|
/* Poll inverval - Mandatory only if GPIO is polled. */
|
|
uint32_t poll_interval;
|
|
/* Details about the key - Mandatory */
|
|
struct key_info key;
|
|
};
|
|
|
|
#endif /* __DRIVERS_GENERIC_GPIO_KEYS_H__ */
|