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-29 23:31:29 -0700
commit115ab924fc16e8d8403433b243b1fabb53e42dac (patch)
tree5224bc9070428732d1f3f7241a48dd2e973f6463
parent76b3ba079e434fc9739098eb1937ba48edc06b90 (diff)
downloadchrome-ec-stabilize-4068.0.B.tar.gz
Handle battery charged alarmstabilize-4068.0.B
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 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>
-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 0377e5fc9f..f85fe80de4 100644
--- a/common/pmu_tps65090_charger.c
+++ b/common/pmu_tps65090_charger.c
@@ -24,9 +24,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)
@@ -217,10 +215,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);
@@ -278,13 +280,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