mfd: cros_ec: Fix event processing API
Improve API between EC and Host to report events. Signed-off-by: Gwendal Grignou <gwendal@chromium.org> Acked-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> Acked-by: Benson Leung <bleung@chromium.org> Reviewed-by: Fabien Lahoudere <fabien.lahoudere@collabora.com> Signed-off-by: Lee Jones <lee.jones@linaro.org>
This commit is contained in:
Родитель
a517bb4bb8
Коммит
784dd15c93
|
@ -500,7 +500,8 @@ enum host_event_code {
|
|||
EC_HOST_EVENT_BATTERY_CRITICAL = 7,
|
||||
EC_HOST_EVENT_BATTERY = 8,
|
||||
EC_HOST_EVENT_THERMAL_THRESHOLD = 9,
|
||||
EC_HOST_EVENT_THERMAL_OVERLOAD = 10,
|
||||
/* Event generated by a device attached to the EC */
|
||||
EC_HOST_EVENT_DEVICE = 10,
|
||||
EC_HOST_EVENT_THERMAL = 11,
|
||||
EC_HOST_EVENT_USB_CHARGER = 12,
|
||||
EC_HOST_EVENT_KEY_PRESSED = 13,
|
||||
|
@ -527,14 +528,33 @@ enum host_event_code {
|
|||
EC_HOST_EVENT_HANG_DETECT = 20,
|
||||
/* Hang detect logic detected a hang and warm rebooted the AP */
|
||||
EC_HOST_EVENT_HANG_REBOOT = 21,
|
||||
|
||||
/* PD MCU triggering host event */
|
||||
EC_HOST_EVENT_PD_MCU = 22,
|
||||
|
||||
/* Battery Status flags have changed */
|
||||
EC_HOST_EVENT_BATTERY_STATUS = 23,
|
||||
|
||||
/* EC encountered a panic, triggering a reset */
|
||||
EC_HOST_EVENT_PANIC = 24,
|
||||
|
||||
/* Keyboard fastboot combo has been pressed */
|
||||
EC_HOST_EVENT_KEYBOARD_FASTBOOT = 25,
|
||||
|
||||
/* EC RTC event occurred */
|
||||
EC_HOST_EVENT_RTC = 26,
|
||||
|
||||
/* Emulate MKBP event */
|
||||
EC_HOST_EVENT_MKBP = 27,
|
||||
|
||||
/* EC desires to change state of host-controlled USB mux */
|
||||
EC_HOST_EVENT_USB_MUX = 28,
|
||||
|
||||
/* EC RTC event occurred */
|
||||
EC_HOST_EVENT_RTC = 26,
|
||||
/* TABLET/LAPTOP mode or detachable base attach/detach event */
|
||||
EC_HOST_EVENT_MODE_CHANGE = 29,
|
||||
|
||||
/* Keyboard recovery combo with hardware reinitialization */
|
||||
EC_HOST_EVENT_KEYBOARD_RECOVERY_HW_REINIT = 30,
|
||||
|
||||
/*
|
||||
* The high bit of the event mask is not used as a host event code. If
|
||||
|
@ -1259,7 +1279,7 @@ enum ec_feature_code {
|
|||
EC_FEATURE_REFINED_TABLET_MODE_HYSTERESIS = 37,
|
||||
/* EC supports audio codec. */
|
||||
EC_FEATURE_AUDIO_CODEC = 38,
|
||||
/* EC Supports SCP. */
|
||||
/* The MCU is a System Companion Processor (SCP). */
|
||||
EC_FEATURE_SCP = 39,
|
||||
/* The MCU is an Integrated Sensor Hub */
|
||||
EC_FEATURE_ISH = 40,
|
||||
|
@ -3183,12 +3203,23 @@ struct ec_result_keyscan_seq_ctrl {
|
|||
} __ec_todo_packed;
|
||||
|
||||
/*
|
||||
* Command for retrieving the next pending MKBP event from the EC device
|
||||
* Get the next pending MKBP event.
|
||||
*
|
||||
* The device replies with UNAVAILABLE if there aren't any pending events.
|
||||
* Returns EC_RES_UNAVAILABLE if there is no event pending.
|
||||
*/
|
||||
#define EC_CMD_GET_NEXT_EVENT 0x0067
|
||||
|
||||
#define EC_MKBP_HAS_MORE_EVENTS_SHIFT 7
|
||||
|
||||
/*
|
||||
* We use the most significant bit of the event type to indicate to the host
|
||||
* that the EC has more MKBP events available to provide.
|
||||
*/
|
||||
#define EC_MKBP_HAS_MORE_EVENTS BIT(EC_MKBP_HAS_MORE_EVENTS_SHIFT)
|
||||
|
||||
/* The mask to apply to get the raw event type */
|
||||
#define EC_MKBP_EVENT_TYPE_MASK (BIT(EC_MKBP_HAS_MORE_EVENTS_SHIFT) - 1)
|
||||
|
||||
enum ec_mkbp_event {
|
||||
/* Keyboard matrix changed. The event data is the new matrix state. */
|
||||
EC_MKBP_EVENT_KEY_MATRIX = 0,
|
||||
|
@ -3205,9 +3236,21 @@ enum ec_mkbp_event {
|
|||
/* The state of the switches have changed. */
|
||||
EC_MKBP_EVENT_SWITCH = 4,
|
||||
|
||||
/* EC sent a sysrq command */
|
||||
/* New Fingerprint sensor event, the event data is fp_events bitmap. */
|
||||
EC_MKBP_EVENT_FINGERPRINT = 5,
|
||||
|
||||
/*
|
||||
* Sysrq event: send emulated sysrq. The event data is sysrq,
|
||||
* corresponding to the key to be pressed.
|
||||
*/
|
||||
EC_MKBP_EVENT_SYSRQ = 6,
|
||||
|
||||
/*
|
||||
* New 64-bit host event.
|
||||
* The event data is 8 bytes of host event flags.
|
||||
*/
|
||||
EC_MKBP_EVENT_HOST_EVENT64 = 7,
|
||||
|
||||
/* Notify the AP that something happened on CEC */
|
||||
EC_MKBP_EVENT_CEC_EVENT = 8,
|
||||
|
||||
|
@ -3217,27 +3260,15 @@ enum ec_mkbp_event {
|
|||
/* Number of MKBP events */
|
||||
EC_MKBP_EVENT_COUNT,
|
||||
};
|
||||
BUILD_ASSERT(EC_MKBP_EVENT_COUNT <= EC_MKBP_EVENT_TYPE_MASK);
|
||||
|
||||
union __ec_align_offset1 ec_response_get_next_data {
|
||||
uint8_t key_matrix[13];
|
||||
|
||||
/* Unaligned */
|
||||
uint32_t host_event;
|
||||
|
||||
struct __ec_todo_unpacked {
|
||||
/* For aligning the fifo_info */
|
||||
uint8_t reserved[3];
|
||||
struct ec_response_motion_sense_fifo_info info;
|
||||
} sensor_fifo;
|
||||
|
||||
uint32_t buttons;
|
||||
uint32_t switches;
|
||||
uint32_t sysrq;
|
||||
};
|
||||
|
||||
union __ec_align_offset1 ec_response_get_next_data_v1 {
|
||||
uint8_t key_matrix[16];
|
||||
uint32_t host_event;
|
||||
uint64_t host_event64;
|
||||
|
||||
struct __ec_todo_unpacked {
|
||||
/* For aligning the fifo_info */
|
||||
uint8_t reserved[3];
|
||||
|
@ -3245,11 +3276,44 @@ union __ec_align_offset1 ec_response_get_next_data_v1 {
|
|||
} sensor_fifo;
|
||||
|
||||
uint32_t buttons;
|
||||
|
||||
uint32_t switches;
|
||||
|
||||
uint32_t fp_events;
|
||||
|
||||
uint32_t sysrq;
|
||||
|
||||
/* CEC events from enum mkbp_cec_event */
|
||||
uint32_t cec_events;
|
||||
};
|
||||
|
||||
union __ec_align_offset1 ec_response_get_next_data_v1 {
|
||||
uint8_t key_matrix[16];
|
||||
|
||||
/* Unaligned */
|
||||
uint32_t host_event;
|
||||
uint64_t host_event64;
|
||||
|
||||
struct __ec_todo_unpacked {
|
||||
/* For aligning the fifo_info */
|
||||
uint8_t reserved[3];
|
||||
struct ec_response_motion_sense_fifo_info info;
|
||||
} sensor_fifo;
|
||||
|
||||
uint32_t buttons;
|
||||
|
||||
uint32_t switches;
|
||||
|
||||
uint32_t fp_events;
|
||||
|
||||
uint32_t sysrq;
|
||||
|
||||
/* CEC events from enum mkbp_cec_event */
|
||||
uint32_t cec_events;
|
||||
|
||||
uint8_t cec_message[16];
|
||||
};
|
||||
BUILD_ASSERT(sizeof(union ec_response_get_next_data_v1) == 16);
|
||||
|
||||
struct ec_response_get_next_event {
|
||||
uint8_t event_type;
|
||||
|
@ -3268,6 +3332,7 @@ struct ec_response_get_next_event_v1 {
|
|||
#define EC_MKBP_POWER_BUTTON 0
|
||||
#define EC_MKBP_VOL_UP 1
|
||||
#define EC_MKBP_VOL_DOWN 2
|
||||
#define EC_MKBP_RECOVERY 3
|
||||
|
||||
/* Switches */
|
||||
#define EC_MKBP_LID_OPEN 0
|
||||
|
|
Загрузка…
Ссылка в новой задаче