Commit de83db57 authored by Gwendal Grignou's avatar Gwendal Grignou Committed by Lee Jones

mfd: cros_ec: Add lightbar v2 API

New API split commands, improve EC command latency.
Signed-off-by: default avatarGwendal Grignou <gwendal@chromium.org>
Acked-by: default avatarEnric Balletbo i Serra <enric.balletbo@collabora.com>
Acked-by: default avatarBenson Leung <bleung@chromium.org>
Reviewed-by: default avatarFabien Lahoudere <fabien.lahoudere@collabora.com>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
parent 89193a04
...@@ -1658,7 +1658,10 @@ struct lightbar_params_v1 { ...@@ -1658,7 +1658,10 @@ struct lightbar_params_v1 {
int32_t s3_sleep_for; int32_t s3_sleep_for;
int32_t s3_ramp_up; int32_t s3_ramp_up;
int32_t s3_ramp_down; int32_t s3_ramp_down;
int32_t s5_ramp_up;
int32_t s5_ramp_down;
int32_t tap_tick_delay; int32_t tap_tick_delay;
int32_t tap_gate_delay;
int32_t tap_display_time; int32_t tap_display_time;
/* Tap-for-battery params */ /* Tap-for-battery params */
...@@ -1686,11 +1689,82 @@ struct lightbar_params_v1 { ...@@ -1686,11 +1689,82 @@ struct lightbar_params_v1 {
uint8_t s0_idx[2][LB_BATTERY_LEVELS]; /* AP is running */ uint8_t s0_idx[2][LB_BATTERY_LEVELS]; /* AP is running */
uint8_t s3_idx[2][LB_BATTERY_LEVELS]; /* AP is sleeping */ 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 */ /* Color palette */
struct rgb_s color[8]; /* 0-3 are Google colors */ struct rgb_s color[8]; /* 0-3 are Google colors */
} __ec_todo_packed; } __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 #define EC_LB_PROG_LEN 192
struct lightbar_program { struct lightbar_program {
uint8_t size; uint8_t size;
...@@ -1704,7 +1778,10 @@ struct ec_params_lightbar { ...@@ -1704,7 +1778,10 @@ struct ec_params_lightbar {
* The following commands have no args: * The following commands have no args:
* *
* dump, off, on, init, get_seq, get_params_v0, get_params_v1, * 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. * Don't use an empty struct, because C++ hates that.
*/ */
...@@ -1731,6 +1808,14 @@ struct ec_params_lightbar { ...@@ -1731,6 +1808,14 @@ struct ec_params_lightbar {
struct lightbar_params_v0 set_params_v0; struct lightbar_params_v0 set_params_v0;
struct lightbar_params_v1 set_params_v1; 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; struct lightbar_program set_program;
}; };
} __ec_todo_packed; } __ec_todo_packed;
...@@ -1752,6 +1837,14 @@ struct ec_response_lightbar { ...@@ -1752,6 +1837,14 @@ struct ec_response_lightbar {
struct lightbar_params_v0 get_params_v0; struct lightbar_params_v0 get_params_v0;
struct lightbar_params_v1 get_params_v1; 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 { struct __ec_todo_unpacked {
uint32_t num; uint32_t num;
uint32_t flags; uint32_t flags;
...@@ -1764,9 +1857,11 @@ struct ec_response_lightbar { ...@@ -1764,9 +1857,11 @@ struct ec_response_lightbar {
/* /*
* The following commands have no response: * 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, * 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; } __ec_todo_packed;
...@@ -1795,6 +1890,18 @@ enum lightbar_command { ...@@ -1795,6 +1890,18 @@ enum lightbar_command {
LIGHTBAR_CMD_MANUAL_SUSPEND_CTRL = 19, LIGHTBAR_CMD_MANUAL_SUSPEND_CTRL = 19,
LIGHTBAR_CMD_SUSPEND = 20, LIGHTBAR_CMD_SUSPEND = 20,
LIGHTBAR_CMD_RESUME = 21, 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 LIGHTBAR_NUM_CMDS
}; };
...@@ -1813,6 +1920,14 @@ enum ec_led_id { ...@@ -1813,6 +1920,14 @@ enum ec_led_id {
EC_LED_ID_POWER_LED, EC_LED_ID_POWER_LED,
/* LED on power adapter or its plug */ /* LED on power adapter or its plug */
EC_LED_ID_ADAPTER_LED, 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 EC_LED_ID_COUNT
}; };
...@@ -1827,6 +1942,7 @@ enum ec_led_colors { ...@@ -1827,6 +1942,7 @@ enum ec_led_colors {
EC_LED_COLOR_BLUE, EC_LED_COLOR_BLUE,
EC_LED_COLOR_YELLOW, EC_LED_COLOR_YELLOW,
EC_LED_COLOR_WHITE, EC_LED_COLOR_WHITE,
EC_LED_COLOR_AMBER,
EC_LED_COLOR_COUNT EC_LED_COLOR_COUNT
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment