summaryrefslogtreecommitdiff
path: root/common/charge_state.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/charge_state.c')
-rw-r--r--common/charge_state.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/common/charge_state.c b/common/charge_state.c
index 61b17a2193..e0646c80c5 100644
--- a/common/charge_state.c
+++ b/common/charge_state.c
@@ -175,12 +175,20 @@ static int state_common(struct power_state_context *ctx)
state_machine_force_idle = 0;
}
+#ifdef CONFIG_BATTERY_CHECK_CONNECTED
+ if (!battery_is_connected()) {
+ curr->error |= F_BATTERY_NOT_CONNECTED;
+ return curr->error;
+ }
+#endif /* CONFIG_BATTERY_CHECK_CONNECTED */
+
+ /* Read temperature and see if battery is responsive */
rv = battery_temperature(&batt->temperature);
if (rv) {
/* Check low battery condition and retry */
- if (curr->ac && ctx->battery_present == 1 &&
+ if (curr->ac && ctx->battery_responsive &&
!(curr->error & F_CHARGER_MASK)) {
- ctx->battery_present = 0;
+ ctx->battery_responsive = 0;
/*
* Try to revive ultra low voltage pack. Charge
* battery pack with minimum current and maximum
@@ -192,17 +200,19 @@ static int state_common(struct power_state_context *ctx)
sleep(1);
rv = battery_temperature(&batt->temperature);
if (rv == 0) {
- ctx->battery_present = 1;
+ ctx->battery_responsive = 1;
break;
}
}
}
/* Set error if battery is still unresponsive */
- if (rv)
- curr->error |= F_BATTERY_TEMPERATURE;
+ if (rv) {
+ curr->error |= F_BATTERY_UNRESPONSIVE;
+ return curr->error;
+ }
} else {
- ctx->battery_present = 1;
+ ctx->battery_responsive = 1;
}
if (battery_voltage(&batt->voltage))
@@ -785,7 +795,8 @@ static void charge_init(void)
ctx->trickle_charging_time.val = 0;
ctx->battery = battery_get_info();
ctx->charger = charger_get_info();
- ctx->battery_present = 1;
+ /* Assume the battery is responsive until proven otherwise */
+ ctx->battery_responsive = 1;
/* Set up LPC direct memmap */
ctx->memmap_batt_volt =