summaryrefslogtreecommitdiff
path: root/driver
diff options
context:
space:
mode:
authorSean Hou <seanhou@lionsemi.com>2020-09-03 15:59:41 -0700
committerCommit Bot <commit-bot@chromium.org>2020-09-08 22:01:46 +0000
commit2d5ec5ab135bc8a6a93f31cc74cbcf5b241082e8 (patch)
tree07a67f77c1d7464319caa4dfc62423a5405ac496 /driver
parent9fbe526a760ccfb030038868e5538a0b6b8d6042 (diff)
downloadchrome-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>
Diffstat (limited to 'driver')
-rw-r--r--driver/ln9310.c17
-rw-r--r--driver/ln9310.h10
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,