summaryrefslogtreecommitdiff
path: root/driver/ln9310.c
diff options
context:
space:
mode:
authorSean Hou <seanhou@lionsemi.com>2020-11-04 22:30:39 -0800
committerCommit Bot <commit-bot@chromium.org>2020-11-30 20:35:48 +0000
commit3c068a74639d883dbd7092b43a2efd7edf02b723 (patch)
treee8943aefec778090c304946eed31918ecd51988f /driver/ln9310.c
parent80bbcb5f97f095f0d8d2f895548c241660b7dc06 (diff)
downloadchrome-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.c53
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();