diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2018-07-30 16:44:06 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-08-07 18:08:55 -0700 |
commit | e750da58458108fae8f83318d61daa5667004dd7 (patch) | |
tree | 0f0ac2d9a5601a01fff2768b292ad06f1a958ec9 /board/nami/led.c | |
parent | f33a10bba34c74e8b06e4bf1d157fbede13d5526 (diff) | |
download | chrome-ec-e750da58458108fae8f83318d61daa5667004dd7.tar.gz |
Nami: Allow battery LED to turn off on battery error
Currently, a battery LED is not turned off even when its pattern is
configured as LED_OFF and PULSE_NO.
This patch fixes it.
Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
BUG=b:111969858
BRANCH=none
TEST=Verify battery & power LEDs reflect correct BP_YES or BP_NO status
on Pantheon.
Change-Id: I408f10d376fd58f6bca66e3a3c864103b84ae80a
Reviewed-on: https://chromium-review.googlesource.com/1155971
Commit-Ready: Daisuke Nojiri <dnojiri@chromium.org>
Tested-by: Daisuke Nojiri <dnojiri@chromium.org>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'board/nami/led.c')
-rw-r--r-- | board/nami/led.c | 47 |
1 files changed, 26 insertions, 21 deletions
diff --git a/board/nami/led.c b/board/nami/led.c index c991af9ce1..2ca2cccc43 100644 --- a/board/nami/led.c +++ b/board/nami/led.c @@ -223,6 +223,15 @@ static void led_init(void) pwm_enable(PWM_CH_LED1, 1); pwm_enable(PWM_CH_LED2, 1); + + /* After sysjump, power_state is cleared. Thus, we need to actively + * retrieve it. */ + if (chipset_in_state(CHIPSET_STATE_ANY_OFF)) + power_state = LED_STATE_S5; + else if (chipset_in_state(CHIPSET_STATE_ANY_SUSPEND)) + power_state = LED_STATE_S3; + else + power_state = LED_STATE_S0; } DECLARE_HOOK(HOOK_INIT, led_init, HOOK_PRIO_DEFAULT); @@ -354,17 +363,6 @@ static void tick_power(void) hook_call_deferred(&tick_power_data, tick_led(EC_LED_ID_POWER_LED)); } -static void led_alert(int enable) -{ - if (enable) { - /* Overwrite the current signal */ - config_tick(EC_LED_ID_BATTERY_LED, &battery_error); - tick_battery(); - } else { - led_charge_hook(); - } -} - static void cancel_tick(enum ec_led_id id) { if (id == EC_LED_ID_BATTERY_LED) @@ -373,14 +371,29 @@ static void cancel_tick(enum ec_led_id id) hook_call_deferred(&tick_power_data, -1); } -static void start_tick(enum ec_led_id id) +static void start_tick(enum ec_led_id id, struct led_pattern *pattern) { + if (!pattern->pulse) { + cancel_tick(id); + set_color(id, pattern->color, 100); + return; + } + + config_tick(id, pattern); if (id == EC_LED_ID_BATTERY_LED) tick_battery(); else tick_power(); } +static void led_alert(int enable) +{ + if (enable) + start_tick(EC_LED_ID_BATTERY_LED, &battery_error); + else + led_charge_hook(); +} + void config_one_led(enum ec_led_id id, enum led_charge_state charge) { const led_patterns *pattern; @@ -397,15 +410,7 @@ void config_one_led(enum ec_led_id id, enum led_charge_state charge) else p = (*pattern)[charge][power_state]; - if (!p.pulse) { - /* solid/static color */ - cancel_tick(id); - set_color(id, p.color, 100); - return; - } - - config_tick(id, &p); - start_tick(id); + start_tick(id, &p); } void config_leds(enum led_charge_state charge) |