summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKein Yuan <kein.yuan@intel.com>2014-03-21 16:42:13 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-03-25 00:33:41 +0000
commit72be9d5881e3d125df0c4951ebfa8ad72d445361 (patch)
treee093b20120146cd7f23b07c62886617e1d1cb3f2
parent3b1fce4855e2484b50b3c6b93e325c1931eaa3c6 (diff)
downloadchrome-ec-72be9d5881e3d125df0c4951ebfa8ad72d445361.tar.gz
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 <kein.yuan@intel.com> Reviewed-on: https://chromium-review.googlesource.com/191153 Reviewed-by: Bill Richardson <wfrichar@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r--common/charger.c24
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();