diff options
Diffstat (limited to 'common/charge_manager.c')
-rw-r--r-- | common/charge_manager.c | 15 |
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; |