summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2016-11-29 11:10:33 -0800
committerPhilip Chen <philipchen@chromium.org>2016-11-30 21:16:28 +0000
commita825399498fe045b7abbf46153c545a8a0130676 (patch)
tree3005fb057d1091f7fbe5203dcd72b7ba51373645
parent43634d36d273887b1f2349c333a7b4b229a83365 (diff)
downloadchrome-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.c15
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;