diff options
author | John Crossley <crossley@lionsemi.corp-partner.google.com> | 2021-01-09 04:42:14 +0000 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-01-12 19:46:25 +0000 |
commit | 4167ccc6fc40b865d5eb9f6e13b7a95f9aba0f19 (patch) | |
tree | 772fd994b5df1d2a2fce706154b937ea08fac99d | |
parent | a9eca9e0415df335f5ac1adfd1fb154f53fa8cd6 (diff) | |
download | chrome-ec-4167ccc6fc40b865d5eb9f6e13b7a95f9aba0f19.tar.gz |
ln9310: Update register to reduce hibernate current
Change initialization value of these three registers to reduce
hibernate mode current: INFET_CP_PD_BIAS_CFG=0x0, INGATE_PD_EN=0x0,
INFET_AUTO_MODE=0x1
BRANCH=Trogdor
BUG=b:176858036
TEST=In hibernate mode check that LN9310 VIN current drops
from 1.6 mA (w/ previous firmware) to ~105 uA.
Change-Id: I9041a912cd68fdf75a7bd2d40d88e17e1dc893c9
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2622758
Reviewed-by: Wai-Hong Tam <waihong@google.com>
Commit-Queue: Wai-Hong Tam <waihong@google.com>
Tested-by: Wai-Hong Tam <waihong@google.com>
-rw-r--r-- | driver/ln9310.c | 49 | ||||
-rw-r--r-- | driver/ln9310.h | 16 |
2 files changed, 61 insertions, 4 deletions
diff --git a/driver/ln9310.c b/driver/ln9310.c index 93ee7973b4..48992f73b8 100644 --- a/driver/ln9310.c +++ b/driver/ln9310.c @@ -121,8 +121,8 @@ static int ln9310_update_startup_seq(void) /* Startup sequence instruction swap */ field_update8(LN9310_REG_LION_CTRL, - 0xff, - 0xaa); + LN9310_LION_CTRL_MASK, + LN9310_LION_CTRL_UNLOCK); field_update8(LN9310_REG_SWAP_CTRL_0, 0xff, @@ -156,8 +156,8 @@ static int ln9310_update_startup_seq(void) field_update8(LN9310_REG_LION_CTRL, - 0xff, - 0x00); + LN9310_LION_CTRL_MASK, + LN9310_LION_CTRL_LOCK); return EC_SUCCESS; } @@ -233,11 +233,52 @@ static int ln9310_init_2to1(void) return EC_SUCCESS; } +static int ln9310_update_infet(void) +{ + CPRINTS("LN9310 update infet configuration"); + + + field_update8(LN9310_REG_LION_CTRL, + LN9310_LION_CTRL_MASK, + LN9310_LION_CTRL_UNLOCK); + + /* Update Infet register settings */ + field_update8(LN9310_REG_CFG_5, + LN9310_CFG_5_INGATE_PD_EN_MASK, + LN9310_CFG_5_INGATE_PD_EN_OFF); + + field_update8(LN9310_REG_CFG_5, + LN9310_CFG_5_INFET_CP_PD_BIAS_CFG_MASK, + LN9310_CFG_5_INFET_CP_PD_BIAS_CFG_LOWEST); + + /* enable automatic infet control */ + field_update8(LN9310_REG_PWR_CTRL, + LN9310_PWR_INFET_AUTO_MODE_MASK, + LN9310_PWR_INFET_AUTO_MODE_ON); + + /* disable LS_HELPER during IDLE by setting MSK bit high */ + field_update8(LN9310_REG_CFG_0, + LN9310_CFG_0_LS_HELPER_IDLE_MSK_MASK, + LN9310_CFG_0_LS_HELPER_IDLE_MSK_ON); + + field_update8(LN9310_REG_LION_CTRL, + LN9310_LION_CTRL_MASK, + LN9310_LION_CTRL_LOCK); + + return EC_SUCCESS; +} + void ln9310_init(void) { int status, val; enum battery_cell_type batt; + /* Update INFET configuration */ + status = ln9310_update_infet(); + + if (status != EC_SUCCESS) + return; + /* * Set OPERATION_MODE update method * - OP_MODE_MANUAL_UPDATE = 0 diff --git a/driver/ln9310.h b/driver/ln9310.h index 3cf4aaa3ca..8441e30b91 100644 --- a/driver/ln9310.h +++ b/driver/ln9310.h @@ -59,6 +59,9 @@ #define LN9310_PWR_OP_MODE_SWITCH31 0x03 #define LN9310_PWR_OP_MODE_MANUAL_UPDATE_MASK 0x40 #define LN9310_PWR_OP_MODE_MANUAL_UPDATE_OFF 0x00 +#define LN9310_PWR_INFET_AUTO_MODE_MASK 0x08 +#define LN9310_PWR_INFET_AUTO_MODE_ON 0x08 +#define LN9310_PWR_INFET_AUTO_MODE_OFF 0x00 #define LN9310_REG_SYS_CTRL 0x1e @@ -126,6 +129,13 @@ #define LN9310_REG_SC_DITHER_CTRL 0x2f #define LN9310_REG_LION_CTRL 0x30 +#define LN9310_LION_CTRL_MASK 0xFF +#define LN9310_LION_CTRL_UNLOCK 0xAA +#define LN9310_LION_CTRL_LOCK 0x00 + +#define LN9310_REG_CFG_0 0x3C +#define LN9310_CFG_0_LS_HELPER_IDLE_MSK_MASK 0x20 +#define LN9310_CFG_0_LS_HELPER_IDLE_MSK_ON 0x20 #define LN9310_REG_CFG_4 0x40 #define LN9310_CFG_4_SC_OUT_PRECHARGE_EN_TIME_CFG BIT(2) @@ -137,6 +147,12 @@ #define LN9310_CFG_4_SW1_VGS_SHORT_EN_MSK_OFF 0x00 #define LN9310_CFG_4_BSTH_BSTL_HIGH_ROUT_CFG_LOWEST 0x00 +#define LN9310_REG_CFG_5 0x41 +#define LN9310_CFG_5_INGATE_PD_EN_MASK 0xC0 +#define LN9310_CFG_5_INGATE_PD_EN_OFF 0x00 +#define LN9310_CFG_5_INFET_CP_PD_BIAS_CFG_MASK 0x30 +#define LN9310_CFG_5_INFET_CP_PD_BIAS_CFG_LOWEST 0x00 + #define LN9310_REG_SWAP_CTRL_0 0x58 #define LN9310_REG_SWAP_CTRL_1 0x59 #define LN9310_REG_SWAP_CTRL_2 0x5A |