From dfb93dda00cb159da7e21aef1fda2f35ccfe8bb6 Mon Sep 17 00:00:00 2001 From: Shawn Nematbakhsh Date: Mon, 2 Jan 2017 10:04:58 -0800 Subject: charger: Prevent power-on while battery is disconnected Wait for revival of disconnected battery before allowing AP power-on. BUG=chrome-os-partner:61462 BRANCH=gru TEST=Manual on kevin, put battery into ship mode, verify that bd9995* CHG_EN is set prior to AP power-on. Change-Id: I77254535ad5d627376cb0bec2289b96e6b4fc670 Signed-off-by: Shawn Nematbakhsh Reviewed-on: https://chromium-review.googlesource.com/424069 Reviewed-by: Aseda Aboagye Commit-Queue: Wonjoon Lee Tested-by: Wonjoon Lee (cherry picked from commit 03ec07d618895654f72ed66f0edda70c5b7493f2) Reviewed-on: https://chromium-review.googlesource.com/424986 --- common/charge_state_v2.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/common/charge_state_v2.c b/common/charge_state_v2.c index 3835cf1bd6..782fee5a24 100644 --- a/common/charge_state_v2.c +++ b/common/charge_state_v2.c @@ -966,6 +966,7 @@ int charge_prevent_power_on(int power_button_pressed) { int prevent_power_on = 0; #ifdef CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON + int battery_disconnected = 0; struct batt_params params; struct batt_params *current_batt_params = &curr.batt; static int automatic_power_on = 1; @@ -982,11 +983,15 @@ int charge_prevent_power_on(int power_button_pressed) battery_get_params(¶ms); current_batt_params = ¶ms; } - /* Require a minimum battery level to power on */ - if (current_batt_params->is_present != BP_YES || + #ifdef CONFIG_BATTERY_REVIVE_DISCONNECT - battery_get_disconnect_state() == BATTERY_DISCONNECTED || + battery_disconnected = (battery_get_disconnect_state() == + BATTERY_DISCONNECTED); #endif + + /* Require a minimum battery level to power on */ + if (current_batt_params->is_present != BP_YES || + battery_disconnected || current_batt_params->state_of_charge < CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON) prevent_power_on = 1; @@ -997,7 +1002,7 @@ int charge_prevent_power_on(int power_button_pressed) * LIKELY_PD_USBC_POWER_MW since it may speak PD and provide * sufficient power once we enable PD communication. */ - if (prevent_power_on) + if (prevent_power_on && !battery_disconnected) if (charge_manager_get_power_limit_uw() >= MIN(LIKELY_PD_USBC_POWER_MW * 1000, CONFIG_CHARGER_LIMIT_POWER_THRESH_CHG_MW * 1000)) -- cgit v1.2.1