diff options
author | Tommy Chung <tommy.chung@quanta.corp-partner.google.com> | 2020-08-17 10:42:47 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-08-19 05:00:04 +0000 |
commit | 5f2dde0ec319b4bf1ec863e23d545df885be71c3 (patch) | |
tree | 884be30e14af5ac4d4f57aa6d54d79bdc2838428 /board/burnet | |
parent | 0432c138624c2bff8c9625663d0d08815eb0b1c1 (diff) | |
download | chrome-ec-5f2dde0ec319b4bf1ec863e23d545df885be71c3.tar.gz |
burnet: add power led
BUG=none
BRANCH=firmware-kukui-12573.B
TEST=make sure battery led is showing battery state on system S3.
make sure power led is showing white on S0.
make sure power led is blinking white on S3.
make sure power led is OFF on S5/G3.
Signed-off-by: Tommy Chung <tommy.chung@quanta.corp-partner.google.com>
Change-Id: Ia257a8adc923dd87be304d6070d18550147e4fef
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2359614
Reviewed-by: Ting Shen <phoenixshen@chromium.org>
Diffstat (limited to 'board/burnet')
-rw-r--r-- | board/burnet/gpio.inc | 1 | ||||
-rw-r--r-- | board/burnet/led.c | 53 |
2 files changed, 41 insertions, 13 deletions
diff --git a/board/burnet/gpio.inc b/board/burnet/gpio.inc index 7fa9f4e1c6..e7d9c2006b 100644 --- a/board/burnet/gpio.inc +++ b/board/burnet/gpio.inc @@ -86,6 +86,7 @@ GPIO(USB_C0_DISCHARGE, PIN(B, 6), GPIO_OUT_LOW) IOEX(BAT_LED_AMBER_L, EXPIN(0, 1, 2), GPIO_OUT_HIGH) IOEX(BAT_LED_WHITE_L, EXPIN(0, 1, 4), GPIO_OUT_HIGH) +IOEX(PWR_LED_WHITE_L, EXPIN(0, 1, 3), GPIO_OUT_HIGH) /* * TODO(b:138352732): On IT88801 expander, To be readded once IT8801 driver and diff --git a/board/burnet/led.c b/board/burnet/led.c index 5b65d7b948..46dab20697 100644 --- a/board/burnet/led.c +++ b/board/burnet/led.c @@ -14,7 +14,13 @@ #define BAT_LED_ON 0 #define BAT_LED_OFF 1 -const enum ec_led_id supported_led_ids[] = {EC_LED_ID_BATTERY_LED}; +#define POWER_LED_ON 0 +#define POWER_LED_OFF 1 + +const enum ec_led_id supported_led_ids[] = { + EC_LED_ID_BATTERY_LED, + EC_LED_ID_POWER_LED +}; const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids); @@ -46,6 +52,21 @@ static int led_set_color_battery(enum led_color color) return EC_SUCCESS; } +static int led_set_color_power(enum ec_led_colors color) +{ + switch (color) { + case LED_OFF: + ioex_set_level(IOEX_PWR_LED_WHITE_L, POWER_LED_OFF); + break; + case LED_WHITE: + ioex_set_level(IOEX_PWR_LED_WHITE_L, POWER_LED_ON); + break; + default: + return EC_ERROR_UNKNOWN; + } + return EC_SUCCESS; +} + void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range) { brightness_range[EC_LED_COLOR_WHITE] = 1; @@ -78,25 +99,28 @@ int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness) return EC_SUCCESS; } +static void led_set_power(void) +{ + static int power_tick; + + power_tick++; + + if (chipset_in_state(CHIPSET_STATE_ON)) + led_set_color_power(LED_WHITE); + else if (chipset_in_state(CHIPSET_STATE_ANY_SUSPEND)) + led_set_color_power( + (power_tick & 0x2) ? LED_WHITE : LED_OFF); + else + led_set_color_power(LED_OFF); +} + static void led_set_battery(void) { static int battery_ticks; - static int power_ticks; uint32_t chflags = charge_get_flags(); battery_ticks++; - /* override battery led for system suspend */ - if (chipset_in_state(CHIPSET_STATE_SUSPEND | - CHIPSET_STATE_STANDBY) && - charge_get_state() != PWR_STATE_CHARGE) { - led_set_color_battery(power_ticks++ & 0x2 ? - LED_WHITE : LED_OFF); - return; - } - - power_ticks = 0; - switch (charge_get_state()) { case PWR_STATE_CHARGE: led_set_color_battery(LED_AMBER); @@ -141,6 +165,9 @@ static void led_set_battery(void) /* Called by hook task every TICK */ static void led_tick(void) { + if (led_auto_control_is_enabled(EC_LED_ID_POWER_LED)) + led_set_power(); + if (led_auto_control_is_enabled(EC_LED_ID_BATTERY_LED)) led_set_battery(); } |