diff options
-rw-r--r-- | common/charger.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/common/charger.c b/common/charger.c index 3780b2b5a1..d7c92fe2a4 100644 --- a/common/charger.c +++ b/common/charger.c @@ -12,6 +12,7 @@ #include "host_command.h" #include "printf.h" #include "util.h" +#include "hooks.h" /* Console output macros */ #define CPUTS(outstr) cputs(CC_CHARGER, outstr) @@ -19,6 +20,7 @@ /* DPTF current limit, -1 = none */ static int dptf_limit_ma = -1; +static int dptf_limit_ma_bak = -1; void dptf_set_charging_current_limit(int ma) { @@ -30,6 +32,28 @@ int dptf_get_charging_current_limit(void) return dptf_limit_ma; } +static void dptf_suspend_hook(void) +{ + /* Before get to Sx, EC should take control of charger from DPTF */ + dptf_limit_ma_bak = dptf_limit_ma; + dptf_limit_ma = -1; +} +DECLARE_HOOK(HOOK_CHIPSET_SUSPEND, dptf_suspend_hook, HOOK_PRIO_DEFAULT); + +static void dptf_shutdown_hook(void) +{ + dptf_limit_ma = -1; + dptf_limit_ma_bak = -1; +} +DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN, dptf_shutdown_hook, HOOK_PRIO_DEFAULT); + +static void dptf_s0_hook(void) +{ + /* Before go to S0, EC restore charger control */ + dptf_limit_ma = dptf_limit_ma_bak; +} +DECLARE_HOOK(HOOK_CHIPSET_RESUME, dptf_s0_hook, HOOK_PRIO_DEFAULT); + int charger_closest_voltage(int voltage) { const struct charger_info *info = charger_get_info(); |