diff options
author | Shawn Nematbakhsh <shawnn@chromium.org> | 2017-01-27 13:39:56 -0800 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2017-01-29 07:46:14 +0000 |
commit | ac5c7b4df2c7060e31b94c49e49a778128852dfa (patch) | |
tree | 6949013940573a6e4ad0e47222b527c94933fa86 | |
parent | 313133315822910cccdfee5929df6a6ad2758253 (diff) | |
download | chrome-ec-ac5c7b4df2c7060e31b94c49e49a778128852dfa.tar.gz |
caroline: Blink LED red on critical battery
BUG=chrome-os-partner:58657, chrome-os-partner:62446
TEST=Deplete battery to 0% state of charge, attach charger, verify LED
blinks red until 1% state of charge is reached. Remove battery, set
force_locked, verify AP doesn't boot and red LED flashes.
BRANCH=glados
Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org>
Change-Id: Ibefcf06373fa00b6093df86b37e32cc58467d812
Reviewed-on: https://chromium-review.googlesource.com/434181
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
Commit-Queue: Vincent Palatin <vpalatin@chromium.org>
-rw-r--r-- | board/caroline/led.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/board/caroline/led.c b/board/caroline/led.c index d66c9ac285..e593ba3e91 100644 --- a/board/caroline/led.c +++ b/board/caroline/led.c @@ -21,8 +21,6 @@ #define LED_TOTAL_TICKS 16 #define LED_ON_TICKS 8 -static int led_debug; - const enum ec_led_id supported_led_ids[] = { EC_LED_ID_POWER_LED, EC_LED_ID_BATTERY_LED}; const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids); @@ -68,14 +66,23 @@ int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness) static void caroline_led_set_power_battery(void) { static int power_ticks; + enum charge_state chg_state = charge_get_state(); if (chipset_in_state(CHIPSET_STATE_ON)) { set_color(LED_BLUE); return; } + /* Flash red on critical battery, which usually inhibits AP power-on. */ + if (battery_is_present() != BP_YES || + charge_get_percent() < CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON) { + set_color(((power_ticks++ % LED_TOTAL_TICKS) < LED_ON_TICKS) ? + LED_RED : LED_OFF); + return; + } + /* CHIPSET_STATE_OFF */ - switch (charge_get_state()) { + switch (chg_state) { case PWR_STATE_DISCHARGE: set_color(LED_OFF); break; @@ -83,8 +90,7 @@ static void caroline_led_set_power_battery(void) set_color(LED_RED); break; case PWR_STATE_ERROR: - power_ticks++; - set_color(((power_ticks % LED_TOTAL_TICKS) + set_color(((power_ticks++ % LED_TOTAL_TICKS) < LED_ON_TICKS) ? LED_RED : LED_GREEN); break; case PWR_STATE_CHARGE_NEAR_FULL: @@ -95,7 +101,8 @@ static void caroline_led_set_power_battery(void) set_color(LED_RED); break; } - if ((charge_get_state()) != PWR_STATE_ERROR) + + if (chg_state != PWR_STATE_ERROR) power_ticks = 0; } @@ -104,9 +111,6 @@ static void caroline_led_set_power_battery(void) */ static void led_tick(void) { - if (led_debug) - return; - if (led_auto_control_is_enabled(EC_LED_ID_POWER_LED) && led_auto_control_is_enabled(EC_LED_ID_BATTERY_LED)) { caroline_led_set_power_battery(); |