diff options
-rw-r--r-- | baseboard/octopus/led_states.c | 23 | ||||
-rw-r--r-- | baseboard/octopus/led_states.h | 4 | ||||
-rw-r--r-- | board/fleex/led.c | 1 |
3 files changed, 25 insertions, 3 deletions
diff --git a/baseboard/octopus/led_states.c b/baseboard/octopus/led_states.c index 8df4758d31..4836a1c18a 100644 --- a/baseboard/octopus/led_states.c +++ b/baseboard/octopus/led_states.c @@ -32,11 +32,17 @@ static enum led_states led_get_state(void) else if (charge_lvl < led_charge_lvl_2) new_state = STATE_CHARGING_LVL_2; else - new_state = STATE_CHARGING_FULL_CHARGE; + if (chipset_in_state(CHIPSET_STATE_ANY_OFF)) + new_state = STATE_CHARGING_FULL_S5; + else + new_state = STATE_CHARGING_FULL_CHARGE; break; case PWR_STATE_DISCHARGE_FULL: if (extpower_is_present()) { - new_state = STATE_CHARGING_FULL_CHARGE; + if (chipset_in_state(CHIPSET_STATE_ANY_OFF)) + new_state = STATE_CHARGING_FULL_S5; + else + new_state = STATE_CHARGING_FULL_CHARGE; break; } /* Intentional fall-through */ @@ -59,7 +65,10 @@ static enum led_states led_get_state(void) new_state = STATE_BATTERY_ERROR; break; case PWR_STATE_CHARGE_NEAR_FULL: - new_state = STATE_CHARGING_FULL_CHARGE; + if (chipset_in_state(CHIPSET_STATE_ANY_OFF)) + new_state = STATE_CHARGING_FULL_S5; + else + new_state = STATE_CHARGING_FULL_CHARGE; break; case PWR_STATE_IDLE: /* External power connected in IDLE */ if (charge_get_flags() & CHARGE_FLAG_FORCE_IDLE) @@ -89,6 +98,14 @@ static void led_update_battery(void) * continue using the previous one. */ if (desired_state != led_state && desired_state < LED_NUM_STATES) { + /* + * Allow optional CHARGING_FULL_S5 state to fall back to + * FULL_CHARGE if not defined. + */ + if (desired_state == STATE_CHARGING_FULL_S5 && + led_bat_state_table[desired_state][LED_PHASE_0].time == 0) + desired_state = STATE_CHARGING_FULL_CHARGE; + /* State is changing */ led_state = desired_state; /* Reset ticks and period when state changes */ diff --git a/baseboard/octopus/led_states.h b/baseboard/octopus/led_states.h index d9d9c8c235..72e8b37f73 100644 --- a/baseboard/octopus/led_states.h +++ b/baseboard/octopus/led_states.h @@ -28,11 +28,15 @@ enum led_phase { * STATE_CHARGING_LVL_1 is when 0 <= charge_percentage < led_charge_level_1 * STATE_CHARGING_LVL_2 is when led_charge_level_1 <= charge_percentage < led_charge_level_2 * STATE_CHARGING_FULL_CHARGE is when led_charge_level_2 <= charge_percentage < 100 + * + * STATE_CHARGING_FULL_S5 is optional and state machine will fall back to + * FULL_CHARGE if not defined */ enum led_states { STATE_CHARGING_LVL_1, STATE_CHARGING_LVL_2, STATE_CHARGING_FULL_CHARGE, + STATE_CHARGING_FULL_S5, STATE_DISCHARGE_S0, STATE_DISCHARGE_S0_BAT_LOW, STATE_DISCHARGE_S3, diff --git a/board/fleex/led.c b/board/fleex/led.c index 32a3855bd2..c658dc369e 100644 --- a/board/fleex/led.c +++ b/board/fleex/led.c @@ -23,6 +23,7 @@ struct led_descriptor led_bat_state_table[LED_NUM_STATES][LED_NUM_PHASES] = { {LED_OFF, 1 * LED_ONE_SEC} }, [STATE_CHARGING_LVL_2] = {{EC_LED_COLOR_AMBER, LED_INDEFINITE} }, [STATE_CHARGING_FULL_CHARGE] = {{EC_LED_COLOR_WHITE, LED_INDEFINITE} }, + [STATE_CHARGING_FULL_S5] = {{LED_OFF, LED_INDEFINITE} }, [STATE_DISCHARGE_S0] = {{EC_LED_COLOR_WHITE, LED_INDEFINITE} }, [STATE_DISCHARGE_S0_BAT_LOW] = {{EC_LED_COLOR_AMBER, 1 * LED_ONE_SEC}, {LED_OFF, 1 * LED_ONE_SEC} }, |