summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Parker <dparker@chromium.org>2013-08-01 20:30:31 -0700
committerChromeBot <chrome-bot@google.com>2013-08-02 12:16:44 -0700
commit0d3bdc690e7ab3ed0ab190b0529e95c2bbba4e7e (patch)
tree975065727f925e447ba9ac0132a944c8733fb00a
parent33f8086c90b8ecc3289c4c144103eb5c6dc0eea8 (diff)
downloadchrome-ec-0d3bdc690e7ab3ed0ab190b0529e95c2bbba4e7e.tar.gz
Falco: Stop charging after a timeout of 10 hours
BUG=chrome-os-partner:20145 BRANCH=falco TEST=Hack it. Add (uint64_t)599 * MINUTE to ctx->curr.ts.val in the timeout comparison. This makes the 10 hour timeout only take 1 minute. Testing this directly is tricky as a healthy battery will charge quickly. If you force it to trickle charge it will give up before 10 hours pass. Change-Id: I69094a07e58c2d65e322ddc6a1b2ced828da0e26 Signed-off-by: Dave Parker <dparker@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/64309
-rw-r--r--board/falco/board.h1
-rw-r--r--common/charge_state.c10
-rw-r--r--include/config.h9
3 files changed, 20 insertions, 0 deletions
diff --git a/board/falco/board.h b/board/falco/board.h
index cb5190f8b3..8abf578cb7 100644
--- a/board/falco/board.h
+++ b/board/falco/board.h
@@ -157,6 +157,7 @@ enum x86_signal {
#define CONFIG_CHARGER_SENSE_RESISTOR 10 /* Charge sense resistor, mOhm */
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 10 /* Input sensor resistor, mOhm */
#define CONFIG_CHARGER_INPUT_CURRENT 4032 /* mA, about half max */
+#define CONFIG_CHARGER_TIMEOUT_HOURS 10 /* Max time to charge battery, hours */
enum adc_channel {
/* EC internal die temperature in degrees K. */
diff --git a/common/charge_state.c b/common/charge_state.c
index f7a644bfe3..f425bb6509 100644
--- a/common/charge_state.c
+++ b/common/charge_state.c
@@ -631,6 +631,16 @@ void charger_task(void)
while (1) {
state_common(ctx);
+#ifdef CONFIG_CHARGER_TIMEOUT_HOURS
+ if (ctx->curr.state == PWR_STATE_CHARGE &&
+ ctx->power_state_updated_time.val +
+ CONFIG_CHARGER_TIMEOUT_HOURS * HOUR < ctx->curr.ts.val) {
+ CPRINTF("[%T Charge timed out after %d hours]\n",
+ CONFIG_CHARGER_TIMEOUT_HOURS);
+ charge_force_idle(1);
+ }
+#endif /* CONFIG_CHARGER_TIMEOUT_HOURS */
+
switch (ctx->prev.state) {
case PWR_STATE_INIT:
case PWR_STATE_REINIT:
diff --git a/include/config.h b/include/config.h
index 635c47f9b3..4bfe375510 100644
--- a/include/config.h
+++ b/include/config.h
@@ -125,6 +125,15 @@
/* Value of the input current sense resistor, in mOhms */
#undef CONFIG_CHARGER_SENSE_RESISTOR_AC
+/*
+ * Maximum time to charge the battery, in hours.
+ *
+ * If this timeout is reached, the charger will enter force-idle state.
+ * If not defined, charger will provide current until the battery asks it to
+ * stop.
+ */
+#undef CONFIG_CHARGER_TIMEOUT_HOURS
+
/*****************************************************************************/
/* Chipset config */