summaryrefslogtreecommitdiff
path: root/common/charge_manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/charge_manager.c')
-rw-r--r--common/charge_manager.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/common/charge_manager.c b/common/charge_manager.c
index 3958e64147..70e0e1540f 100644
--- a/common/charge_manager.c
+++ b/common/charge_manager.c
@@ -1240,6 +1240,21 @@ void charge_manager_leave_safe_mode(void)
if (left_safe_mode)
return;
+ /*
+ * Sometimes the fuel gauge will report that it has
+ * sufficient state of charge and remaining capacity,
+ * but in actuality it doesn't. When the EC sees that
+ * information, it trusts it and leaves charge manager
+ * safe mode. Doing so will allow CHARGE_PORT_NONE to
+ * be selected, thereby cutting off the input FETs.
+ * When the battery cannot provide the charge it claims,
+ * the system loses power, shuts down, and the battery
+ * is not charged even though the charger is plugged in.
+ * By waiting 500ms, we can avoid the selection of
+ * CHARGE_PORT_NONE around init time and not cut off the
+ * input FETs.
+ */
+ msleep(500);
CPRINTS("%s()", __func__);
cflush();
left_safe_mode = 1;