summaryrefslogtreecommitdiff
path: root/board/akemi
diff options
context:
space:
mode:
authorxiaoqiang.zhu <xiaoqiang.zhu@bitland.corp-partner.google.com>2019-12-27 12:20:15 +0800
committerCommit Bot <commit-bot@chromium.org>2020-01-10 01:37:55 +0000
commitda61613db0844384b8715062ee2e00fe871f6120 (patch)
treed4787c88d2bc3354f35274179ef1e4a9ee3bbc48 /board/akemi
parentf5e5148447da0df764dc330b05a5267f968c98c2 (diff)
downloadchrome-ec-da61613db0844384b8715062ee2e00fe871f6120.tar.gz
akemi: enable quick charge when power off
In order to meet the time requirements of charging when power off. Need enable battery fast charging when power off, and disable fast charging when power on. BUG=b:146540037 BRANCH=master TEST=Check the charging current of the three batteries, the maximum charging current is about 3325mA in S0 state and in power off states is about 6650mA. Change-Id: Ia3e2988c9b4ec83f7410746bb6a81e307025f0c6 Signed-off-by: xiaoqiang.zhu <xiaoqiang.zhu@bitland.corp-partner.google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1982939 Reviewed-by: Paul Fagerburg <pfagerburg@chromium.org>
Diffstat (limited to 'board/akemi')
-rw-r--r--board/akemi/board.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/board/akemi/board.c b/board/akemi/board.c
index a9ce4d2c4b..b49b1eb041 100644
--- a/board/akemi/board.c
+++ b/board/akemi/board.c
@@ -42,6 +42,7 @@
#include "usb_pd.h"
#include "usbc_ppc.h"
#include "util.h"
+#include "battery_smart.h"
#define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args)
#define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args)
@@ -389,3 +390,45 @@ __override uint32_t board_override_feature_flags0(uint32_t flags0)
else
return flags0;
}
+
+/* Battery functions */
+#define SB_OPTIONALMFG_FUNCTION2 0x26
+#define QUICK_CHARGE_SUPPORT 0x01
+#define QUICK_CHARGE_ENABLE 0x02
+
+#define SB_QUICK_CHARGE_ENABLE 1
+#define SB_QUICK_CHARGE_DISABLE 0
+
+static void sb_quick_charge_mode(int enable)
+{
+ int val, rv;
+
+ rv = sb_read(SB_OPTIONALMFG_FUNCTION2, &val);
+ if (rv)
+ return;
+
+ if (val & QUICK_CHARGE_SUPPORT) {
+ if (enable)
+ val |= QUICK_CHARGE_ENABLE;
+ else
+ val &= ~QUICK_CHARGE_ENABLE;
+
+ sb_write(SB_OPTIONALMFG_FUNCTION2, val);
+ }
+}
+
+/* Called on AP S5 -> S0 transition */
+static void board_chipset_startup(void)
+{
+ /* Normal charge current */
+ sb_quick_charge_mode(SB_QUICK_CHARGE_DISABLE);
+}
+DECLARE_HOOK(HOOK_CHIPSET_STARTUP, board_chipset_startup, HOOK_PRIO_INIT_I2C+1);
+
+/* Called on AP S0 -> S5 transition */
+static void board_chipset_shutdown(void)
+{
+ /* Quick charge current */
+ sb_quick_charge_mode(SB_QUICK_CHARGE_ENABLE);
+}
+DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN, board_chipset_shutdown, HOOK_PRIO_DEFAULT);