summaryrefslogtreecommitdiff
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 03:54:50 +0000
commitb1e17ec97598ca017cee58c64af637466fa7602b (patch)
treeb44926aa80f7e89e0c049f62eeee77f11c43303b
parent9b0c98b29744d5785197c2adc1b2a06a46f827c6 (diff)
downloadchrome-ec-b1e17ec97598ca017cee58c64af637466fa7602b.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> (cherry picked from commit da61613db0844384b8715062ee2e00fe871f6120) Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1994681 Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org> Commit-Queue: Tim Wawrzynczak <twawrzynczak@chromium.org> Tested-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
-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 ba9769b13b..3c5235456d 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);