diff options
author | Sean Hou <seanhou@lionsemi.com> | 2020-09-03 15:59:41 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-09-08 22:01:46 +0000 |
commit | 2d5ec5ab135bc8a6a93f31cc74cbcf5b241082e8 (patch) | |
tree | 07a67f77c1d7464319caa4dfc62423a5405ac496 | |
parent | 9fbe526a760ccfb030038868e5538a0b6b8d6042 (diff) | |
download | chrome-ec-2d5ec5ab135bc8a6a93f31cc74cbcf5b241082e8.tar.gz |
ln9310: OPERATION_MODE update method.
Use SELF_SYNC instead of MANUAL_UPDATE method to cross
OPERATION_MODE register, which is a multi-bit i2c register,
from i2c clock domain to local ref_clk domain
BRANCH=None
BUG=None
TEST=Built successfully.
Change-Id: Ibc4d1b6ae12a323a3b7c345247ab92e4acc762dc
Signed-off-by: Sean Hou <seanhou@lionsemi.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2393090
Reviewed-by: Wai-Hong Tam <waihong@google.com>
Tested-by: Wai-Hong Tam <waihong@google.com>
Commit-Queue: Wai-Hong Tam <waihong@google.com>
-rw-r--r-- | driver/ln9310.c | 17 | ||||
-rw-r--r-- | driver/ln9310.h | 10 |
2 files changed, 27 insertions, 0 deletions
diff --git a/driver/ln9310.c b/driver/ln9310.c index 0bbf130683..01bc069372 100644 --- a/driver/ln9310.c +++ b/driver/ln9310.c @@ -11,6 +11,7 @@ #include "hooks.h" #include "i2c.h" #include "util.h" +#include "timer.h" #define CPUTS(outstr) cputs(CC_CHIPSET, outstr) #define CPRINTF(format, args...) cprintf(CC_CHIPSET, format, ## args) @@ -174,6 +175,22 @@ void ln9310_init(void) int status, val; enum battery_cell_type batt; + /* + * Set OPERATION_MODE update method + * - OP_MODE_MANUAL_UPDATE = 0 + * - OP_MODE_SELF_SYNC_EN = 1 + */ + field_update8(LN9310_REG_PWR_CTRL, + LN9310_PWR_OP_MODE_MANUAL_UPDATE_MASK, + LN9310_PWR_OP_MODE_MANUAL_UPDATE_OFF); + + field_update8(LN9310_REG_TIMER_CTRL, + LN9310_TIMER_OP_SELF_SYNC_EN_MASK, + LN9310_TIMER_OP_SELF_SYNC_EN_ON); + + usleep(LN9310_CDC_DELAY); + CPRINTS("LN9310 OP_MODE Update method: Self-sync"); + batt = board_get_battery_cell_type(); if (batt == BATTERY_CELL_TYPE_3S) { status = ln9310_init_3to1(); diff --git a/driver/ln9310.h b/driver/ln9310.h index 399b25a662..6568c1efd0 100644 --- a/driver/ln9310.h +++ b/driver/ln9310.h @@ -57,6 +57,8 @@ #define LN9310_PWR_OP_MODE_BYPASS 0x01 #define LN9310_PWR_OP_MODE_SWITCH21 0x02 #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_REG_SYS_CTRL 0x1e #define LN9310_SYS_CTRL_LB_DELTA_MASK 0x38 @@ -79,7 +81,12 @@ #define LN9310_TRACK_INFET_OUT_SWITCH_OK_CFG_10V 0x10 #define LN9310_REG_OCP_CTRL 0x23 + #define LN9310_REG_TIMER_CTRL 0x24 +#define LN9310_TIMER_OP_SELF_SYNC_EN BIT(3) +#define LN9310_TIMER_OP_SELF_SYNC_EN_MASK 0x08 +#define LN9310_TIMER_OP_SELF_SYNC_EN_ON 0x08 + #define LN9310_REG_RECOVERY_CTRL 0x25 #define LN9310_REG_LB_CTRL 0x26 #define LN9310_REG_SC_OUT_OV_CTRL 0x29 @@ -112,6 +119,9 @@ #define LN9310_BC_STS_B_INFET_OUT_SWITCH_OK BIT(5) #define LN9310_BC_STS_B_INFET_OUT_SWITCH_OK_MASK 0x20 +/* LN9310 Timing definition */ +#define LN9310_CDC_DELAY 120 /* 120us */ + /* Battery cell type */ enum battery_cell_type { BATTERY_CELL_TYPE_UNKNOWN = 0, |