From 72be9d5881e3d125df0c4951ebfa8ad72d445361 Mon Sep 17 00:00:00 2001 From: Kein Yuan Date: Fri, 21 Mar 2014 16:42:13 -0700 Subject: rambi: EC take control on charger to make sure charge battery in non-S0 states when work with DPTF. If user sleeps/shutdown system when on battery(or when TCHG is throttled), system will never charge while in S3 or S5. BUG=chrome-os-partner:355015 BRANCH=rambi TEST=with the same test system will charge in S3 or S5. Change-Id: Idc68b2f533da0a55ad07d0ff8e3e5294c1e2143c Signed-off-by: Kein Yuan Reviewed-on: https://chromium-review.googlesource.com/191153 Reviewed-by: Bill Richardson Reviewed-by: Randall Spangler --- common/charger.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) 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(); -- cgit v1.2.1