summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2017-01-27 13:39:56 -0800
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2017-01-29 07:46:14 +0000
commitac5c7b4df2c7060e31b94c49e49a778128852dfa (patch)
tree6949013940573a6e4ad0e47222b527c94933fa86
parent313133315822910cccdfee5929df6a6ad2758253 (diff)
downloadchrome-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.c22
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();