summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRong Chang <rongchang@chromium.org>2012-08-05 19:18:54 +0800
committerGerrit <chrome-bot@google.com>2012-08-06 00:05:52 -0700
commitea9a51856edb1f770f3e83c7d020c336fc2dc090 (patch)
treedbb62e38aaddeaa9028a9763c71ca806908e6b32
parent6156c1b904b2e2ce9216b1472141ce263c64127e (diff)
downloadchrome-ec-ea9a51856edb1f770f3e83c7d020c336fc2dc090.tar.gz
Add TPSChrome comments on charging code
This change adds more comments on charging states and fixes battery temperature out of range log messages. Signed-off-by: Rong Chang <rongchang@chromium.org> BUG=chrome-os-partner:10900,12222 TEST=none Change-Id: Ie3240dc246ad7590078929e41575c67798373aca Reviewed-on: https://gerrit.chromium.org/gerrit/29253 Reviewed-by: Vic Yang <victoryang@chromium.org> Commit-Ready: Rong Chang <rongchang@chromium.org> Tested-by: Rong Chang <rongchang@chromium.org>
-rw-r--r--common/pmu_tps65090_charger.c43
1 files changed, 38 insertions, 5 deletions
diff --git a/common/pmu_tps65090_charger.c b/common/pmu_tps65090_charger.c
index 4aacf99155..62c84bb342 100644
--- a/common/pmu_tps65090_charger.c
+++ b/common/pmu_tps65090_charger.c
@@ -134,6 +134,9 @@ static int wait_t3_discharging(void)
return ST_DISCHARGING;
}
+/*
+ * Turn off the host application processor
+ */
static int system_off(void)
{
if (chipset_in_state(CHIPSET_STATE_ON)) {
@@ -152,6 +155,9 @@ static int system_off(void)
return wait_t1_idle();
}
+/*
+ * Notify the host when battery remaining charge is lower than 10%
+ */
static int notify_battery_low(void)
{
static timestamp_t last_notify_time;
@@ -231,35 +237,62 @@ static int calc_next_state(int state)
return ST_PRE_CHARGING;
case ST_CHARGING:
+ /* Go back to idle state when AC is unplugged */
if (!get_ac())
break;
- if (battery_temperature(&batt_temp) ||
- !battery_charging_range(batt_temp)) {
- CPUTS("[pmu] charging: battery hot\n");
+
+ /*
+ * Disable charging on battery access error, or charging
+ * temperature out of range.
+ */
+ if (battery_temperature(&batt_temp)) {
+ CPUTS("[pmu] charging: unable to get battery "
+ "temperature\n");
+ enable_charging(0);
+ break;
+ } else if (!battery_charging_range(batt_temp)) {
+ CPRINTF("[pmu] charging: temperature out of range "
+ "%dC\n",
+ battery_temperature_celsius(batt_temp));
enable_charging(0);
break;
}
+
+ /*
+ * Disable charging on battery alarm events or access error:
+ * - over temperature
+ * - over current
+ */
if (battery_status(&alarm) || (alarm & ALARM_CHARGING)) {
CPUTS("[pmu] charging: battery alarm\n");
enable_charging(0);
break;
}
+
+ /*
+ * Disable charging on charger alarm events:
+ * - charger over current
+ * - charger over temperature
+ */
if (pmu_is_charger_alarm()) {
CPUTS("[pmu] charging: charger alarm\n");
enable_charging(0);
break;
}
+
return wait_t2_charging();
case ST_DISCHARGING:
-
+ /* Go back to idle state when AC is plugged */
if (get_ac())
return wait_t1_idle();
/* Check battery discharging temperature range */
if (battery_temperature(&batt_temp) == 0) {
if (!battery_discharging_range(batt_temp)) {
- CPUTS("[pmu] discharging: battery hot\n");
+ CPRINTF("[pmu] discharging: temperature out of"
+ "range %dC\n",
+ battery_temperature_celsius(batt_temp));
enable_charging(0);
return system_off();
}