summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/charge_manager.c2
-rw-r--r--common/charge_state_v2.c13
2 files changed, 11 insertions, 4 deletions
diff --git a/common/charge_manager.c b/common/charge_manager.c
index 3d78d5874b..7ae0400262 100644
--- a/common/charge_manager.c
+++ b/common/charge_manager.c
@@ -904,6 +904,8 @@ void charge_manager_leave_safe_mode(void)
if (left_safe_mode)
return;
+ CPRINTS("%s()", __func__);
+ cflush();
left_safe_mode = 1;
if (charge_manager_is_seeded())
hook_call_deferred(&charge_manager_refresh_data, 0);
diff --git a/common/charge_state_v2.c b/common/charge_state_v2.c
index 3387ac6302..8102029c21 100644
--- a/common/charge_state_v2.c
+++ b/common/charge_state_v2.c
@@ -1717,12 +1717,18 @@ void charger_task(void *u)
} else
#endif
#ifdef CONFIG_BATTERY_REVIVE_DISCONNECT
- battery_seems_to_be_disconnected = 0;
+ /*
+ * Always check the disconnect state. This is because
+ * the battery disconnect state is one of the items used
+ * to decide whether or not to leave safe mode.
+ */
+ battery_seems_to_be_disconnected =
+ battery_get_disconnect_state() ==
+ BATTERY_DISCONNECTED;
if (curr.requested_voltage == 0 &&
curr.requested_current == 0 &&
- battery_get_disconnect_state() ==
- BATTERY_DISCONNECTED) {
+ battery_seems_to_be_disconnected) {
/*
* Battery is in disconnect state. Apply a
* current to kick it out of this state.
@@ -1732,7 +1738,6 @@ void charger_task(void *u)
batt_info->voltage_max;
curr.requested_current =
batt_info->precharge_current;
- battery_seems_to_be_disconnected = 1;
} else
#endif
if (curr.state == ST_PRECHARGE ||