From b4ae7c0034ca2799cfc8acfb1e7caca338157938 Mon Sep 17 00:00:00 2001 From: Ting Shen Date: Tue, 7 Dec 2021 19:14:52 +0800 Subject: kakadu/katsu: fix bugged bits in charger The charger on some shipped device can not charge because a hidden bit (BYPASS_MODE) is flipped. Implement a quick fix to reset the reserved bits on these bugged devices. BUG=b:207456334 TEST=make BRANCH=kukui Signed-off-by: Ting Shen Change-Id: I73d7865648162f420181f4bf067502bc0226cbda Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3319466 Tested-by: wen zhang Reviewed-by: wen zhang Reviewed-by: Eric Yilun Lin Commit-Queue: Ting Shen Tested-by: Ting Shen (cherry picked from commit ad95230a2eaa04377768b7e15bb6bfb4d4a6139b) Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3336639 Auto-Submit: Ting Shen Commit-Queue: Eric Yilun Lin --- board/kakadu/board.c | 14 ++++++++++++++ board/katsu/board.c | 14 ++++++++++++++ driver/charger/rt946x.h | 11 ++++++----- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/board/kakadu/board.c b/board/kakadu/board.c index 75eb9ac112..0031b986a5 100644 --- a/board/kakadu/board.c +++ b/board/kakadu/board.c @@ -500,3 +500,17 @@ void board_fill_source_power_info(int port, r->max_power = r->meas.voltage_now * r->meas.current_max; } +/* b/207456334: bugged reserved bits causes device not charging */ +static void mt6370_reg_fix(void) +{ + i2c_update8(I2C_PORT_CHARGER, + RT946X_ADDR_FLAGS, + RT946X_REG_CHGCTRL1, + BIT(3) | BIT(5), MASK_CLR); + i2c_update8(I2C_PORT_CHARGER, + RT946X_ADDR_FLAGS, + RT946X_REG_CHGCTRL2, + BIT(5) | BIT(RT946X_SHIFT_BATDET_DIS_DLY), + MASK_CLR); +} +DECLARE_HOOK(HOOK_INIT, mt6370_reg_fix, HOOK_PRIO_DEFAULT); diff --git a/board/katsu/board.c b/board/katsu/board.c index 4a39e17148..4dc5a09f07 100644 --- a/board/katsu/board.c +++ b/board/katsu/board.c @@ -402,3 +402,17 @@ void board_fill_source_power_info(int port, r->max_power = r->meas.voltage_now * r->meas.current_max; } +/* b/207456334: bugged reserved bits causes device not charging */ +static void mt6370_reg_fix(void) +{ + i2c_update8(I2C_PORT_CHARGER, + RT946X_ADDR_FLAGS, + RT946X_REG_CHGCTRL1, + BIT(3) | BIT(5), MASK_CLR); + i2c_update8(I2C_PORT_CHARGER, + RT946X_ADDR_FLAGS, + RT946X_REG_CHGCTRL2, + BIT(5) | BIT(RT946X_SHIFT_BATDET_DIS_DLY), + MASK_CLR); +} +DECLARE_HOOK(HOOK_INIT, mt6370_reg_fix, HOOK_PRIO_DEFAULT); diff --git a/driver/charger/rt946x.h b/driver/charger/rt946x.h index 99723c905f..74b81887da 100644 --- a/driver/charger/rt946x.h +++ b/driver/charger/rt946x.h @@ -294,11 +294,12 @@ #define RT946X_MASK_STAT_EN BIT(RT946X_SHIFT_STAT_EN) /* ========== CHGCTRL2 0x02 ============ */ -#define RT946X_SHIFT_SHIP_MODE 7 -#define RT946X_SHIFT_TE 4 -#define RT946X_SHIFT_ILMTSEL 2 -#define RT946X_SHIFT_CFO_EN 1 -#define RT946X_SHIFT_CHG_EN 0 +#define RT946X_SHIFT_SHIP_MODE 7 +#define RT946X_SHIFT_BATDET_DIS_DLY 6 +#define RT946X_SHIFT_TE 4 +#define RT946X_SHIFT_ILMTSEL 2 +#define RT946X_SHIFT_CFO_EN 1 +#define RT946X_SHIFT_CHG_EN 0 #define RT946X_MASK_SHIP_MODE BIT(RT946X_SHIFT_SHIP_MODE) #define RT946X_MASK_TE BIT(RT946X_SHIFT_TE) -- cgit v1.2.1