diff options
author | Vic Yang <victoryang@chromium.org> | 2013-04-29 11:44:18 +0800 |
---|---|---|
committer | ChromeBot <chrome-bot@google.com> | 2013-04-30 08:41:15 -0700 |
commit | c2b63a88c542ca817376bea0a1f2cd1c5194294b (patch) | |
tree | 2a5336ba01ba2e2fd0bdfbab8d20abb663e9707a | |
parent | 84e6b889dd2b41394d6e2c00c9cc4c406f60307c (diff) | |
download | chrome-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.c | 24 |
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 |