diff options
author | Vic Yang <victoryang@chromium.org> | 2013-04-29 11:44:18 +0800 |
---|---|---|
committer | ChromeBot <chrome-bot@google.com> | 2013-04-29 23:31:29 -0700 |
commit | 115ab924fc16e8d8403433b243b1fabb53e42dac (patch) | |
tree | 5224bc9070428732d1f3f7241a48dd2e973f6463 | |
parent | 76b3ba079e434fc9739098eb1937ba48edc06b90 (diff) | |
download | chrome-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.c | 24 |
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 |