lkml.org 
[lkml]   [2019]   [May]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 16/30] mfd: cros_ec: Fix event processing API
    Date
    Improve API between EC and Host to report events.

    Acked-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
    Acked-by: Benson Leung <bleung@chromium.org>
    Signed-off-by: Gwendal Grignou <gwendal@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
    \
     
     \ /
      Last update: 2019-05-09 23:16    [W:3.411 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site