diff options
author | Sean Hou <seanhou@lionsemi.com> | 2020-11-04 22:30:39 -0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-11-30 20:35:48 +0000 |
commit | 3c068a74639d883dbd7092b43a2efd7edf02b723 (patch) | |
tree | e8943aefec778090c304946eed31918ecd51988f /driver/ln9310.c | |
parent | 80bbcb5f97f095f0d8d2f895548c241660b7dc06 (diff) | |
download | chrome-ec-3c068a74639d883dbd7092b43a2efd7edf02b723.tar.gz |
ln9310: Startup sequence update.
Update Startup sequence to fully address SC_OUT over voltage issue.
BRANCH=master
BUG=170591575
TEST=Build successfully.
Change-Id: I31cbd839a7943ee19c19601bf178db6911f3dffd
Signed-off-by: Sean Hou <seanhou@lionsemi.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2520279
Reviewed-by: Wai-Hong Tam <waihong@google.com>
Commit-Queue: Wai-Hong Tam <waihong@google.com>
Tested-by: Wai-Hong Tam <waihong@google.com>
Diffstat (limited to 'driver/ln9310.c')
-rw-r--r-- | driver/ln9310.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/driver/ln9310.c b/driver/ln9310.c index 6835d9af6d..93ee7973b4 100644 --- a/driver/ln9310.c +++ b/driver/ln9310.c @@ -115,6 +115,53 @@ static int is_battery_gt_10v(void) return gt_10v; } +static int ln9310_update_startup_seq(void) +{ + CPRINTS("LN9310 update startup sequence"); + + /* Startup sequence instruction swap */ + field_update8(LN9310_REG_LION_CTRL, + 0xff, + 0xaa); + + field_update8(LN9310_REG_SWAP_CTRL_0, + 0xff, + 0x3f); + + field_update8(LN9310_REG_SWAP_CTRL_1, + 0xff, + 0x51); + + field_update8(LN9310_REG_SWAP_CTRL_2, + 0xff, + 0x19); + + field_update8(LN9310_REG_SWAP_CTRL_3, + 0xff, + 0x02); + + /* Startup sequence settings */ + field_update8(LN9310_REG_CFG_4, + LN9310_CFG_4_SC_OUT_PRECHARGE_EN_TIME_CFG_MASK | + LN9310_CFG_4_SW1_VGS_SHORT_EN_MSK_MASK | + LN9310_CFG_4_BSTH_BSTL_HIGH_ROUT_CFG_MASK, + LN9310_CFG_4_SC_OUT_PRECHARGE_EN_TIME_CFG_ON | + LN9310_CFG_4_SW1_VGS_SHORT_EN_MSK_OFF | + LN9310_CFG_4_BSTH_BSTL_HIGH_ROUT_CFG_LOWEST); + + /* SW4 before BSTH_BSTL */ + field_update8(LN9310_REG_SPARE_0, + LN9310_SPARE_0_SW4_BEFORE_BSTH_BSTL_EN_CFG_MASK, + LN9310_SPARE_0_SW4_BEFORE_BSTH_BSTL_EN_CFG_ON); + + + field_update8(LN9310_REG_LION_CTRL, + 0xff, + 0x00); + + return EC_SUCCESS; +} + static int ln9310_init_3to1(void) { CPRINTS("LN9310 init (3:1 operation)"); @@ -219,6 +266,12 @@ void ln9310_init(void) usleep(LN9310_CDC_DELAY); CPRINTS("LN9310 OP_MODE Update method: Self-sync"); + /* Update Startup sequence */ + status = ln9310_update_startup_seq(); + + if (status != EC_SUCCESS) + return; + batt = board_get_battery_cell_type(); if (batt == BATTERY_CELL_TYPE_3S) { status = ln9310_init_3to1(); |