mfd: cros_ec: Add lightbar v2 API
authorGwendal Grignou <gwendal@chromium.org>
Mon, 3 Jun 2019 18:33:43 +0000 (11:33 -0700)
committerLee Jones <lee.jones@linaro.org>
Mon, 10 Jun 2019 08:15:08 +0000 (09:15 +0100)
New API split commands, improve EC command latency.

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>
include/linux/mfd/cros_ec_commands.h

index 2b3a94a..0ff1941 100644 (file)
@@ -1658,7 +1658,10 @@ struct lightbar_params_v1 {
        int32_t s3_sleep_for;
        int32_t s3_ramp_up;
        int32_t s3_ramp_down;
+       int32_t s5_ramp_up;
+       int32_t s5_ramp_down;
        int32_t tap_tick_delay;
+       int32_t tap_gate_delay;
        int32_t tap_display_time;
 
        /* Tap-for-battery params */
@@ -1686,11 +1689,82 @@ struct lightbar_params_v1 {
        uint8_t s0_idx[2][LB_BATTERY_LEVELS];   /* AP is running */
        uint8_t s3_idx[2][LB_BATTERY_LEVELS];   /* AP is sleeping */
 
+       /* s5: single color pulse on inhibited power-up */
+       uint8_t s5_idx;
+
        /* Color palette */
        struct rgb_s color[8];                  /* 0-3 are Google colors */
 } __ec_todo_packed;
 
-/* Lightbar program */
+/* Lightbar command params v2
+ * crbug.com/467716
+ *
+ * lightbar_parms_v1 was too big for i2c, therefore in v2, we split them up by
+ * logical groups to make it more manageable ( < 120 bytes).
+ *
+ * NOTE: Each of these groups must be less than 120 bytes.
+ */
+
+struct lightbar_params_v2_timing {
+       /* Timing */
+       int32_t google_ramp_up;
+       int32_t google_ramp_down;
+       int32_t s3s0_ramp_up;
+       int32_t s0_tick_delay[2];               /* AC=0/1 */
+       int32_t s0a_tick_delay[2];              /* AC=0/1 */
+       int32_t s0s3_ramp_down;
+       int32_t s3_sleep_for;
+       int32_t s3_ramp_up;
+       int32_t s3_ramp_down;
+       int32_t s5_ramp_up;
+       int32_t s5_ramp_down;
+       int32_t tap_tick_delay;
+       int32_t tap_gate_delay;
+       int32_t tap_display_time;
+} __ec_todo_packed;
+
+struct lightbar_params_v2_tap {
+       /* Tap-for-battery params */
+       uint8_t tap_pct_red;
+       uint8_t tap_pct_green;
+       uint8_t tap_seg_min_on;
+       uint8_t tap_seg_max_on;
+       uint8_t tap_seg_osc;
+       uint8_t tap_idx[3];
+} __ec_todo_packed;
+
+struct lightbar_params_v2_oscillation {
+       /* Oscillation */
+       uint8_t osc_min[2];                     /* AC=0/1 */
+       uint8_t osc_max[2];                     /* AC=0/1 */
+       uint8_t w_ofs[2];                       /* AC=0/1 */
+} __ec_todo_packed;
+
+struct lightbar_params_v2_brightness {
+       /* Brightness limits based on the backlight and AC. */
+       uint8_t bright_bl_off_fixed[2];         /* AC=0/1 */
+       uint8_t bright_bl_on_min[2];            /* AC=0/1 */
+       uint8_t bright_bl_on_max[2];            /* AC=0/1 */
+} __ec_todo_packed;
+
+struct lightbar_params_v2_thresholds {
+       /* Battery level thresholds */
+       uint8_t battery_threshold[LB_BATTERY_LEVELS - 1];
+} __ec_todo_packed;
+
+struct lightbar_params_v2_colors {
+       /* Map [AC][battery_level] to color index */
+       uint8_t s0_idx[2][LB_BATTERY_LEVELS];   /* AP is running */
+       uint8_t s3_idx[2][LB_BATTERY_LEVELS];   /* AP is sleeping */
+
+       /* s5: single color pulse on inhibited power-up */
+       uint8_t s5_idx;
+
+       /* Color palette */
+       struct rgb_s color[8];                  /* 0-3 are Google colors */
+} __ec_todo_packed;
+
+/* Lightbar program. */
 #define EC_LB_PROG_LEN 192
 struct lightbar_program {
        uint8_t size;
@@ -1704,7 +1778,10 @@ struct ec_params_lightbar {
                 * The following commands have no args:
                 *
                 * dump, off, on, init, get_seq, get_params_v0, get_params_v1,
-                * version, get_brightness, get_demo, suspend, resume
+                * version, get_brightness, get_demo, suspend, resume,
+                * get_params_v2_timing, get_params_v2_tap, get_params_v2_osc,
+                * get_params_v2_bright, get_params_v2_thlds,
+                * get_params_v2_colors
                 *
                 * Don't use an empty struct, because C++ hates that.
                 */
@@ -1731,6 +1808,14 @@ struct ec_params_lightbar {
 
                struct lightbar_params_v0 set_params_v0;
                struct lightbar_params_v1 set_params_v1;
+
+               struct lightbar_params_v2_timing set_v2par_timing;
+               struct lightbar_params_v2_tap set_v2par_tap;
+               struct lightbar_params_v2_oscillation set_v2par_osc;
+               struct lightbar_params_v2_brightness set_v2par_bright;
+               struct lightbar_params_v2_thresholds set_v2par_thlds;
+               struct lightbar_params_v2_colors set_v2par_colors;
+
                struct lightbar_program set_program;
        };
 } __ec_todo_packed;
@@ -1752,6 +1837,14 @@ struct ec_response_lightbar {
                struct lightbar_params_v0 get_params_v0;
                struct lightbar_params_v1 get_params_v1;
 
+
+               struct lightbar_params_v2_timing get_params_v2_timing;
+               struct lightbar_params_v2_tap get_params_v2_tap;
+               struct lightbar_params_v2_oscillation get_params_v2_osc;
+               struct lightbar_params_v2_brightness get_params_v2_bright;
+               struct lightbar_params_v2_thresholds get_params_v2_thlds;
+               struct lightbar_params_v2_colors get_params_v2_colors;
+
                struct __ec_todo_unpacked {
                        uint32_t num;
                        uint32_t flags;
@@ -1764,9 +1857,11 @@ struct ec_response_lightbar {
                /*
                 * The following commands have no response:
                 *
-                * off, on, init, set_brightness, seq, reg, set_rgb,
+                * off, on, init, set_brightness, seq, reg, set_rgb, demo,
                 * set_params_v0, set_params_v1, set_program,
-                * manual_suspend_ctrl, suspend, resume
+                * manual_suspend_ctrl, suspend, resume, set_v2par_timing,
+                * set_v2par_tap, set_v2par_osc, set_v2par_bright,
+                * set_v2par_thlds, set_v2par_colors
                 */
        };
 } __ec_todo_packed;
@@ -1795,6 +1890,18 @@ enum lightbar_command {
        LIGHTBAR_CMD_MANUAL_SUSPEND_CTRL = 19,
        LIGHTBAR_CMD_SUSPEND = 20,
        LIGHTBAR_CMD_RESUME = 21,
+       LIGHTBAR_CMD_GET_PARAMS_V2_TIMING = 22,
+       LIGHTBAR_CMD_SET_PARAMS_V2_TIMING = 23,
+       LIGHTBAR_CMD_GET_PARAMS_V2_TAP = 24,
+       LIGHTBAR_CMD_SET_PARAMS_V2_TAP = 25,
+       LIGHTBAR_CMD_GET_PARAMS_V2_OSCILLATION = 26,
+       LIGHTBAR_CMD_SET_PARAMS_V2_OSCILLATION = 27,
+       LIGHTBAR_CMD_GET_PARAMS_V2_BRIGHTNESS = 28,
+       LIGHTBAR_CMD_SET_PARAMS_V2_BRIGHTNESS = 29,
+       LIGHTBAR_CMD_GET_PARAMS_V2_THRESHOLDS = 30,
+       LIGHTBAR_CMD_SET_PARAMS_V2_THRESHOLDS = 31,
+       LIGHTBAR_CMD_GET_PARAMS_V2_COLORS = 32,
+       LIGHTBAR_CMD_SET_PARAMS_V2_COLORS = 33,
        LIGHTBAR_NUM_CMDS
 };
 
@@ -1813,6 +1920,14 @@ enum ec_led_id {
        EC_LED_ID_POWER_LED,
        /* LED on power adapter or its plug */
        EC_LED_ID_ADAPTER_LED,
+       /* LED to indicate left side */
+       EC_LED_ID_LEFT_LED,
+       /* LED to indicate right side */
+       EC_LED_ID_RIGHT_LED,
+       /* LED to indicate recovery mode with HW_REINIT */
+       EC_LED_ID_RECOVERY_HW_REINIT_LED,
+       /* LED to indicate sysrq debug mode. */
+       EC_LED_ID_SYSRQ_DEBUG_LED,
 
        EC_LED_ID_COUNT
 };
@@ -1827,6 +1942,7 @@ enum ec_led_colors {
        EC_LED_COLOR_BLUE,
        EC_LED_COLOR_YELLOW,
        EC_LED_COLOR_WHITE,
+       EC_LED_COLOR_AMBER,
 
        EC_LED_COLOR_COUNT
 };