summaryrefslogtreecommitdiff
path: root/board/nami/led.c
diff options
context:
space:
mode:
authorDaisuke Nojiri <dnojiri@chromium.org>2018-07-30 16:44:06 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-08-07 18:08:55 -0700
commite750da58458108fae8f83318d61daa5667004dd7 (patch)
tree0f0ac2d9a5601a01fff2768b292ad06f1a958ec9 /board/nami/led.c
parentf33a10bba34c74e8b06e4bf1d157fbede13d5526 (diff)
downloadchrome-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.c47
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)