diff options
author | xiaoqiang.zhu <xiaoqiang.zhu@bitland.corp-partner.google.com> | 2019-12-27 12:20:15 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-01-10 01:37:55 +0000 |
commit | da61613db0844384b8715062ee2e00fe871f6120 (patch) | |
tree | d4787c88d2bc3354f35274179ef1e4a9ee3bbc48 /board/akemi | |
parent | f5e5148447da0df764dc330b05a5267f968c98c2 (diff) | |
download | chrome-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.c | 43 |
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); |