diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2019-02-25 12:56:40 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2019-03-12 07:16:03 -0700 |
commit | a901dd977d800016bb63311cd0d229f45f4fe3fc (patch) | |
tree | b3c7079e6d6bf4f3f70f98d2bfe8d673117216ef | |
parent | 6e539b64778deffeba0fde677e4770d46f949ea3 (diff) | |
download | chrome-ec-a901dd977d800016bb63311cd0d229f45f4fe3fc.tar.gz |
chgstv2: Allow board to set charge level for shutdown
Currently, BATTERY_LEVEL_SHUTDOWN is statically determined. This patch
allows it to be set at runtime.
Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
BUG=b/123727148
BRANCH=nami,strago,coral
TEST=Verify Vayne shuts down when soc <= 4 in s0 and s5.
Change-Id: I535c451e97ebf6bc735c46d7789d4b56ed82914b
Reviewed-on: https://chromium-review.googlesource.com/1512619
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: Daisuke Nojiri <dnojiri@chromium.org>
Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
-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 */ |