summaryrefslogtreecommitdiff
path: root/board/akemi
diff options
context:
space:
mode:
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);