Improve API between EC and Host to report events.

Acked-by: Enric Balletbo i Serra <enric.balle...@collabora.com>
Acked-by: Benson Leung <ble...@chromium.org>
Reviewed-by: Fabien Lahoudere <fabien.lahoud...@collabora.com>
Signed-off-by: Gwendal Grignou <gwen...@chromium.org>
---
 include/linux/mfd/cros_ec_commands.h | 87 ++++++++++++++++++++++++----
 1 file changed, 76 insertions(+), 11 deletions(-)

diff --git a/include/linux/mfd/cros_ec_commands.h 
b/include/linux/mfd/cros_ec_commands.h
index 701b03cfa445..51fe65170ce6 100644
--- a/include/linux/mfd/cros_ec_commands.h
+++ b/include/linux/mfd/cros_ec_commands.h
@@ -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,15 +528,34 @@ 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,
 
-       /* EC desires to change state of host-controlled USB mux */
-       EC_HOST_EVENT_USB_MUX = 28,
+       /* 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,
+
+       /* 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
         * it reads back as set, then the entire event mask should be
@@ -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,12 +3260,14 @@ 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;
+       uint32_t host_event;
+       uint64_t host_event64;
 
        struct __ec_todo_unpacked {
                /* For aligning the fifo_info */
@@ -3230,14 +3275,25 @@ union __ec_align_offset1 ec_response_get_next_data {
                struct ec_response_motion_sense_fifo_info info;
        } sensor_fifo;
 
-       uint32_t   buttons;
-       uint32_t   switches;
-       uint32_t   sysrq;
+       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];
@@ -3245,11 +3301,19 @@ 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;
+
        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
-- 
2.21.0.1020.gf2820cf01a-goog

Reply via email to