diff options
Diffstat (limited to 'common/charge_state.c')
-rw-r--r-- | common/charge_state.c | 25 |
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 = |