summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2014-07-29 11:26:18 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-08-06 21:25:05 +0000
commit8e4f9fc6c22700c4b39665955885431126808163 (patch)
treedafd039d8966dce7756f9817608f1b4b35374be9
parentff4eb7e092fb460d7eba58cb44300db7df2dd1de (diff)
downloadchrome-ec-8e4f9fc6c22700c4b39665955885431126808163.tar.gz
charger v2: Apply charge current to full battery in disconnect state
If a battery is found in disconnect state, we need to apply a charge current to get it out of that state, even if the battery is full. BUG=chrome-os-partner:29465 TEST=Manual on Samus. Put full battery into disconnect state then power-on the EC. Pull AC and verify that the battery is no longer disconnected. BRANCH=None Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Change-Id: I43e872e225dc5a651f566d7b190cff85a487805e Reviewed-on: https://chromium-review.googlesource.com/210343 Reviewed-by: Alec Berg <alecaberg@chromium.org> Tested-by: Shawn Nematbakhsh <shawnn@chromium.org> Commit-Queue: Shawn Nematbakhsh <shawnn@chromium.org>
-rw-r--r--common/charge_state_v2.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/common/charge_state_v2.c b/common/charge_state_v2.c
index a3d6384027..9505194720 100644
--- a/common/charge_state_v2.c
+++ b/common/charge_state_v2.c
@@ -43,6 +43,7 @@ static unsigned int user_current_limit = -1U;
test_export_static timestamp_t shutdown_warning_time;
static timestamp_t precharge_start_time;
static int battery_seems_to_be_dead;
+static int battery_seems_to_be_disconnected;
static int problems_exist;
static int debugging;
@@ -253,6 +254,8 @@ static void dump_charge_state(void)
ccprintf("manual_mode = %d\n", manual_mode);
ccprintf("user_current_limit = %dmA\n", user_current_limit);
ccprintf("battery_seems_to_be_dead = %d\n", battery_seems_to_be_dead);
+ ccprintf("battery_seems_to_be_disconnected = %d\n",
+ battery_seems_to_be_disconnected);
ccprintf("debug output = %s\n", debugging ? "on" : "off");
#undef DUMP
}
@@ -599,6 +602,8 @@ void charger_task(void)
} else
#endif
#ifdef CONFIG_BATTERY_REVIVE_DISCONNECT
+ battery_seems_to_be_disconnected = 0;
+
if (curr.requested_voltage == 0 &&
curr.requested_current == 0 &&
battery_get_disconnect_state() ==
@@ -612,6 +617,7 @@ void charger_task(void)
batt_info->voltage_max;
curr.requested_current =
batt_info->precharge_current;
+ battery_seems_to_be_disconnected = 1;
} else
#endif
if (curr.state == ST_PRECHARGE ||
@@ -627,7 +633,12 @@ void charger_task(void)
curr.state = ST_CHARGE;
}
- if (curr.batt.state_of_charge >= BATTERY_LEVEL_FULL) {
+ /*
+ * If battery seems to be disconnected, we need to get it
+ * out of that state, even if the charge level is full.
+ */
+ if (curr.batt.state_of_charge >= BATTERY_LEVEL_FULL &&
+ !battery_seems_to_be_disconnected) {
/* Full up. Stop charging */
curr.state = ST_IDLE;
goto wait_for_it;