diff options
-rw-r--r-- | common/charge_state_v2.c | 13 | ||||
-rw-r--r-- | include/charge_state_v2.h | 8 |
2 files changed, 19 insertions, 2 deletions
diff --git a/common/charge_state_v2.c b/common/charge_state_v2.c index b07e82022e..5d5cae50b8 100644 --- a/common/charge_state_v2.c +++ b/common/charge_state_v2.c @@ -71,6 +71,8 @@ static timestamp_t uvp_throttle_start_time; static int charge_request(int voltage, int current); +static uint8_t battery_level_shutdown; + /* * State for charger_task(). Here so we can reset it on a HOOK_INIT, and * because stack space is more limited than .bss @@ -1275,11 +1277,16 @@ static inline int battery_too_hot(int batt_temp_c) batt_temp_c < batt_info->discharging_min_c)); } +__attribute__((weak)) uint8_t board_set_battery_level_shutdown(void) +{ + return BATTERY_LEVEL_SHUTDOWN; +} + /* True if we know the charge is too low, or we know the voltage is too low. */ static inline int battery_too_low(void) { return ((!(curr.batt.flags & BATT_FLAG_BAD_STATE_OF_CHARGE) && - curr.batt.state_of_charge < BATTERY_LEVEL_SHUTDOWN) || + curr.batt.state_of_charge < battery_level_shutdown) || (!(curr.batt.flags & BATT_FLAG_BAD_VOLTAGE) && curr.batt.voltage <= batt_info->voltage_min)); } @@ -1548,6 +1555,8 @@ void charger_task(void *u) curr.desired_input_current = get_desired_input_current( curr.batt.is_present, info); + battery_level_shutdown = board_set_battery_level_shutdown(); + while (1) { /* Let's see what's going on... */ @@ -1965,7 +1974,7 @@ int charge_want_shutdown(void) { return (curr.state == ST_DISCHARGE) && !(curr.batt.flags & BATT_FLAG_BAD_STATE_OF_CHARGE) && - (curr.batt.state_of_charge < BATTERY_LEVEL_SHUTDOWN); + (curr.batt.state_of_charge < battery_level_shutdown); } int charge_prevent_power_on(int power_button_pressed) diff --git a/include/charge_state_v2.h b/include/charge_state_v2.h index ec164ea507..800ba4e1cd 100644 --- a/include/charge_state_v2.h +++ b/include/charge_state_v2.h @@ -126,5 +126,13 @@ enum critical_shutdown { enum critical_shutdown board_critical_shutdown_check( struct charge_state_data *curr); +/** + * Callback to set battery level for shutdown + * + * A board can implement this to customize shutdown battery level at runtime. + * + * @return battery level for shutdown + */ +uint8_t board_set_battery_level_shutdown(void); #endif /* __CROS_EC_CHARGE_STATE_V2_H */ |