summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVic Yang <victoryang@chromium.org>2013-04-29 11:44:18 +0800
committerChromeBot <chrome-bot@google.com>2013-04-30 08:41:15 -0700
commitc2b63a88c542ca817376bea0a1f2cd1c5194294b (patch)
tree2a5336ba01ba2e2fd0bdfbab8d20abb663e9707a
parent84e6b889dd2b41394d6e2c00c9cc4c406f60307c (diff)
downloadchrome-ec-c2b63a88c542ca817376bea0a1f2cd1c5194294b.tar.gz
Handle battery charged alarm
When battery flags TERMINATE_CHARGE or OVER_CHARGED alarm, we should treat them as a signal of battery fully charged. BUG=chrome-os-partner:18914 TEST=On Spring: 1. Plug in adapter when battery if full, see green LED. 2. Plug in adapter when battery is not full, see yellow LED. BRANCH=spring Original-Change-Id: Ica414a0e1667b8f30a0cc9a5d66dba1b119a59ba Signed-off-by: Vic Yang <victoryang@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/49456 Reviewed-by: Vincent Palatin <vpalatin@chromium.org> (cherry picked from commit 115ab924fc16e8d8403433b243b1fabb53e42dac) Change-Id: Ie611fe9e59f2e9981de9674999efbae0acace2a1 Signed-off-by: Vic Yang <victoryang@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/49580 Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
-rw-r--r--common/pmu_tps65090_charger.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/common/pmu_tps65090_charger.c b/common/pmu_tps65090_charger.c
index db23c77dcf..a506e32604 100644
--- a/common/pmu_tps65090_charger.c
+++ b/common/pmu_tps65090_charger.c
@@ -25,9 +25,7 @@
/* Charging and discharging alarms */
#define ALARM_DISCHARGING (ALARM_TERMINATE_DISCHARGE | ALARM_OVER_TEMP)
-#define ALARM_CHARGING (ALARM_TERMINATE_CHARGE | \
- ALARM_OVER_CHARGED | \
- ALARM_OVER_TEMP)
+#define ALARM_CHARGED (ALARM_OVER_CHARGED | ALARM_TERMINATE_CHARGE)
/* Maximum time allowed to revive a extremely low charge battery */
#define PRE_CHARGING_TIMEOUT (15 * SECOND)
@@ -224,10 +222,14 @@ static int calc_next_state(int state)
if (!battery_start_charging_range(batt_temp))
return ST_BAD_COND;
- /* Turn off charger on battery charging alarm */
- if (battery_status(&alarm) || (alarm & ALARM_CHARGING))
+ /* Turn off charger on battery over temperature alarm */
+ if (battery_status(&alarm) || (alarm & ALARM_OVER_TEMP))
return ST_BAD_COND;
+ /* Stop charging if the battery says it's charged */
+ if (alarm & ALARM_CHARGED)
+ return ST_IDLE;
+
/* Start charging only when battery charge lower than 100% */
if (!battery_state_of_charge(&charge)) {
config_low_current_charging(charge);
@@ -285,13 +287,15 @@ static int calc_next_state(int state)
if (battery_status(&alarm))
return ST_REINIT;
- if (alarm & ALARM_CHARGING) {
- CPUTS("[pmu] charging: battery alarm\n");
- if (alarm & ALARM_OVER_TEMP)
- return ST_CHARGING_ERROR;
- return ST_REINIT;
+ if (alarm & ALARM_OVER_TEMP) {
+ CPUTS("[pmu] charging: battery over temp\n");
+ return ST_CHARGING_ERROR;
}
+ /* Go to idle state if battery is fully charged */
+ if (alarm & ALARM_CHARGED)
+ return ST_IDLE;
+
/*
* Disable charging on charger alarm events:
* - charger over current