diff options
Diffstat (limited to 'common/battery_spring.c')
-rw-r--r-- | common/battery_spring.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/common/battery_spring.c b/common/battery_spring.c index 840ed3fdfe..f86e91cd5d 100644 --- a/common/battery_spring.c +++ b/common/battery_spring.c @@ -26,6 +26,9 @@ #define BATTERY_CUT_OFF_DELAY 0 #endif +static timestamp_t last_cutoff; +static int has_cutoff; + int battery_cut_off(void) { int rv; @@ -40,15 +43,26 @@ int battery_cut_off(void) rv = i2c_xfer(I2C_PORT_BATTERY, BATTERY_ADDR, buf, 3, NULL, 0); i2c_unlock(); + has_cutoff = 1; + last_cutoff = get_time(); + return rv; } +int battery_is_cut_off(void) +{ + return has_cutoff && + get_time().val - last_cutoff.val < BATTERY_CUT_OFF_DELAY; +} + int battery_check_cut_off(void) { int charge; if (!BATTERY_CUT_OFF_MAH) return 0; + if (battery_is_cut_off()) + return 0; if (chipset_in_state(CHIPSET_STATE_ON | CHIPSET_STATE_SUSPEND)) return 0; if (battery_remaining_capacity(&charge)) |