diff --git a/board/falco/board.h b/board/falco/board.h index cb5190f8b3..8abf578cb7 100644 --- a/board/falco/board.h +++ b/board/falco/board.h @@ -157,6 +157,7 @@ enum x86_signal { #define CONFIG_CHARGER_SENSE_RESISTOR 10 /* Charge sense resistor, mOhm */ #define CONFIG_CHARGER_SENSE_RESISTOR_AC 10 /* Input sensor resistor, mOhm */ #define CONFIG_CHARGER_INPUT_CURRENT 4032 /* mA, about half max */ +#define CONFIG_CHARGER_TIMEOUT_HOURS 10 /* Max time to charge battery, hours */ enum adc_channel { /* EC internal die temperature in degrees K. */ diff --git a/common/charge_state.c b/common/charge_state.c index f7a644bfe3..f425bb6509 100644 --- a/common/charge_state.c +++ b/common/charge_state.c @@ -631,6 +631,16 @@ void charger_task(void) while (1) { state_common(ctx); +#ifdef CONFIG_CHARGER_TIMEOUT_HOURS + if (ctx->curr.state == PWR_STATE_CHARGE && + ctx->power_state_updated_time.val + + CONFIG_CHARGER_TIMEOUT_HOURS * HOUR < ctx->curr.ts.val) { + CPRINTF("[%T Charge timed out after %d hours]\n", + CONFIG_CHARGER_TIMEOUT_HOURS); + charge_force_idle(1); + } +#endif /* CONFIG_CHARGER_TIMEOUT_HOURS */ + switch (ctx->prev.state) { case PWR_STATE_INIT: case PWR_STATE_REINIT: diff --git a/include/config.h b/include/config.h index 635c47f9b3..4bfe375510 100644 --- a/include/config.h +++ b/include/config.h @@ -125,6 +125,15 @@ /* Value of the input current sense resistor, in mOhms */ #undef CONFIG_CHARGER_SENSE_RESISTOR_AC +/* + * Maximum time to charge the battery, in hours. + * + * If this timeout is reached, the charger will enter force-idle state. + * If not defined, charger will provide current until the battery asks it to + * stop. + */ +#undef CONFIG_CHARGER_TIMEOUT_HOURS + /*****************************************************************************/ /* Chipset config */