summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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();