diff options
author | Ryan Zhang <Ryan.Zhang@quantatw.com> | 2016-06-17 15:28:05 +0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-06-20 23:14:49 -0700 |
commit | f7d6d881998706f02494d1c46d0d09d26a5f5e10 (patch) | |
tree | 9dbafa061725827a59ef3de1d82ccd9d27c189af /board/elm | |
parent | 0be630aa265d11fab7dd9a2133a36b04e4753666 (diff) | |
download | chrome-ec-f7d6d881998706f02494d1c46d0d09d26a5f5e10.tar.gz |
Elm: update LED controlstabilize-8481.B
following Change#227416 to meet client's spec.
BUG=chrome-os-partner:54263
BRANCH=master
TEST=`make -j BOARD=elm`, check factory force IDLE, works good
Change-Id: I1f0abdcbd56eeab379a6258869ccc133ff80736d
Signed-off-by: Ryan Zhang <Ryan.Zhang@quantatw.com>
Reviewed-on: https://chromium-review.googlesource.com/353521
Reviewed-by: Shawn N <shawnn@chromium.org>
Diffstat (limited to 'board/elm')
-rw-r--r-- | board/elm/led.c | 48 |
1 files changed, 39 insertions, 9 deletions
diff --git a/board/elm/led.c b/board/elm/led.c index 6d22d281e5..d73cc05c1b 100644 --- a/board/elm/led.c +++ b/board/elm/led.c @@ -10,10 +10,15 @@ #include "chipset.h" #include "gpio.h" #include "hooks.h" +#include "host_command.h" #include "led_common.h" #include "util.h" #include "system.h" +#define CRITICAL_LOW_BATTERY_PERMILLAGE 71 +#define LOW_BATTERY_PERMILLAGE 137 +#define FULL_BATTERY_PERMILLAGE 937 + const enum ec_led_id supported_led_ids[] = { EC_LED_ID_BATTERY_LED, EC_LED_ID_POWER_LED @@ -115,15 +120,33 @@ static void elm_led_set_battery(void) { /* * BAT LED behavior: - * - Fully charged / idle: Blue ON + * - Fully charged / normal idle: Blue ON * - Charging: Orange ON - * - Battery discharging capacity<10%, Orange blink - * - Battery error: Orange blink + * - Battery discharging capacity<10%, Orange blink(1:3) + * < 3%, Orange blink(1:1) + * - Battery error: Orange blink(1:1) + * - Factory force idle: Blue 2 sec, Orange 2 sec */ + uint32_t charge_flags = charge_get_flags(); + int remaining_capacity; + int full_charge_capacity; + int permillage; + + /* Make the percentage approximate to UI shown */ + remaining_capacity = *(int *)host_get_memmap(EC_MEMMAP_BATT_CAP); + full_charge_capacity = *(int *)host_get_memmap(EC_MEMMAP_BATT_LFCC); + permillage = !full_charge_capacity ? 0 : + (1000 * remaining_capacity) / full_charge_capacity; + switch (charge_get_state()) { case PWR_STATE_CHARGE: - bat_led_set(BAT_LED_BLUE, 0); - bat_led_set(BAT_LED_ORANGE, 1); + if (permillage < FULL_BATTERY_PERMILLAGE) { + bat_led_set(BAT_LED_BLUE, 0); + bat_led_set(BAT_LED_ORANGE, 1); + } else { + bat_led_set(BAT_LED_BLUE, 1); + bat_led_set(BAT_LED_ORANGE, 0); + } break; case PWR_STATE_CHARGE_NEAR_FULL: bat_led_set(BAT_LED_BLUE, 1); @@ -131,10 +154,12 @@ static void elm_led_set_battery(void) break; case PWR_STATE_DISCHARGE: bat_led_set(BAT_LED_BLUE, 0); - if (charge_get_percent() < 3) + if (!chipset_in_state(CHIPSET_STATE_ANY_OFF) && + permillage <= CRITICAL_LOW_BATTERY_PERMILLAGE) bat_led_set(BAT_LED_ORANGE, (blink_second & 1) ? 0 : 1); - else if (charge_get_percent() < 10) + else if (!chipset_in_state(CHIPSET_STATE_ANY_OFF) && + permillage <= LOW_BATTERY_PERMILLAGE) bat_led_set(BAT_LED_ORANGE, (blink_second & 3) ? 0 : 1); else @@ -145,8 +170,13 @@ static void elm_led_set_battery(void) bat_led_set(BAT_LED_ORANGE, (blink_second & 1) ? 0 : 1); break; case PWR_STATE_IDLE: /* Ext. power connected in IDLE. */ - bat_led_set(BAT_LED_BLUE, 1); - bat_led_set(BAT_LED_ORANGE, 0); + if (charge_flags & CHARGE_FLAG_FORCE_IDLE) { + bat_led_set(BAT_LED_BLUE, (blink_second & 2) ? 0 : 1); + bat_led_set(BAT_LED_ORANGE, (blink_second & 2) ? 1 : 0); + } else { + bat_led_set(BAT_LED_BLUE, 1); + bat_led_set(BAT_LED_ORANGE, 0); + } break; default: /* Other states don't alter LED behavior */ |