diff options
author | Shawn Nematbakhsh <shawnn@chromium.org> | 2016-11-29 11:10:33 -0800 |
---|---|---|
committer | Philip Chen <philipchen@chromium.org> | 2016-11-30 21:16:28 +0000 |
commit | a825399498fe045b7abbf46153c545a8a0130676 (patch) | |
tree | 3005fb057d1091f7fbe5203dcd72b7ba51373645 | |
parent | 43634d36d273887b1f2349c333a7b4b229a83365 (diff) | |
download | chrome-ec-a825399498fe045b7abbf46153c545a8a0130676.tar.gz |
kevin: Don't override charge profile if battery is in ship mode
We must apply voltage / current to the battery to pull it out of
disconnect / ship mode, so don't force discharge if the battery happens
to be fully charged and in ship mode.
BUG=chrome-os-partner:60380
BRANCH=gru
TEST=Manual on kevin, trigger battery disconnect, re-attach AC, verify
system boots cleanly.
Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org>
Change-Id: I68b4ca21a91cce6b2640578dbd7a94412c418f12
Reviewed-on: https://chromium-review.googlesource.com/414610
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
(cherry picked from commit cc5563cf8622f185c6a26699651654a804555ffd)
Reviewed-on: https://chromium-review.googlesource.com/415386
Reviewed-by: Philip Chen <philipchen@chromium.org>
Commit-Queue: Philip Chen <philipchen@chromium.org>
Tested-by: Philip Chen <philipchen@chromium.org>
-rw-r--r-- | board/kevin/battery.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/board/kevin/battery.c b/board/kevin/battery.c index 8f904c7b80..7c0ad1c3e3 100644 --- a/board/kevin/battery.c +++ b/board/kevin/battery.c @@ -62,6 +62,8 @@ int board_cut_off_battery(void) return rv ? EC_RES_ERROR : EC_RES_SUCCESS; } +static int battery_not_disconnected; + enum battery_disconnect_state battery_get_disconnect_state(void) { uint8_t data[6]; @@ -73,9 +75,7 @@ enum battery_disconnect_state battery_get_disconnect_state(void) * This assumes the battery will not go to disconnect state during * runtime. */ - static int not_disconnected; - - if (not_disconnected) + if (battery_not_disconnected) return BATTERY_NOT_DISCONNECTED; if (extpower_is_present()) { @@ -89,7 +89,7 @@ enum battery_disconnect_state battery_get_disconnect_state(void) if (rv || (~data[3] & (BATTERY_DISCHARGING_DISABLED | BATTERY_CHARGING_DISABLED))) { - not_disconnected = 1; + battery_not_disconnected = 1; return BATTERY_NOT_DISCONNECTED; } @@ -110,7 +110,7 @@ enum battery_disconnect_state battery_get_disconnect_state(void) /* No safety fault, battery is disconnected */ return BATTERY_DISCONNECTED; } - not_disconnected = 1; + battery_not_disconnected = 1; return BATTERY_NOT_DISCONNECTED; } @@ -130,8 +130,9 @@ int charger_profile_override(struct charge_state_data *curr) curr->batt.flags &= ~BATT_FLAG_WANT_CHARGE; curr->state = ST_IDLE; now_discharging = 0; - /* Don't start charging if battery is nearly full */ - } else if (curr->batt.status & STATUS_FULLY_CHARGED) { + /* Don't start charging if battery is nearly full */ + } else if ((curr->batt.status & STATUS_FULLY_CHARGED) && + battery_not_disconnected) { curr->requested_current = curr->requested_voltage = 0; curr->batt.flags &= ~BATT_FLAG_WANT_CHARGE; curr->state = ST_DISCHARGE; |