summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiana Z <dzigterman@chromium.org>2020-06-16 13:42:19 -0600
committerCommit Bot <commit-bot@chromium.org>2020-06-19 04:15:27 +0000
commit52accf3dabbe1123ac243ad779623ec2cff3c48f (patch)
tree7bd9f5b58672fe3f3c27600789d8921f03ebc3a0
parentaf403b66288ac4a5a46644e435cc9b8eb381ad10 (diff)
downloadchrome-ec-52accf3dabbe1123ac243ad779623ec2cff3c48f.tar.gz
SM5803: Add SM5803A 3S inits
Adds recommended inits from vendor for 3S batteries on new silicon. BRANCH=None BUG=b:155218826 TEST=make -j buildall Signed-off-by: Diana Z <dzigterman@chromium.org> Change-Id: I52f4809376d1705fc06eb2cf8d8d42a4a4b97b63 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2247394 Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
-rw-r--r--driver/charger/sm5803.c45
-rw-r--r--driver/charger/sm5803.h3
2 files changed, 48 insertions, 0 deletions
diff --git a/driver/charger/sm5803.c b/driver/charger/sm5803.c
index e48b9bfe76..a04e779846 100644
--- a/driver/charger/sm5803.c
+++ b/driver/charger/sm5803.c
@@ -265,6 +265,51 @@ static void sm5803_init(int chgnum)
rv |= i2c_update8(chg_chips[chgnum].i2c_port, 0x37,
0x8E, BIT(5), MASK_SET);
rv |= main_write8(chgnum, 0x1F, 0x00);
+ } else if (reg == 0x03) {
+ uint32_t platform_id;
+
+ rv = main_read8(chgnum, SM5803_REG_PLATFORM, &platform_id);
+ if (rv) {
+ CPRINTS("%s %d: Failed to read platform during init",
+ CHARGER_NAME, chgnum);
+ return;
+ }
+ platform_id &= SM5803_PLATFORM_ID;
+
+ if (platform_id >= 0x0E && platform_id <= 0x17) {
+ /* 3S Battery inits */
+ rv |= main_write8(chgnum, 0x30, 0xC0);
+ rv |= main_write8(chgnum, 0x80, 0x01);
+ rv |= main_write8(chgnum, 0x1A, 0x08);
+
+ rv |= meas_write8(chgnum, 0x08, 0xC2);
+
+ rv |= chg_write8(chgnum, 0x1D, 0x40);
+
+ rv |= chg_write8(chgnum, 0x22, 0xB3);
+
+ rv |= chg_write8(chgnum, 0x4F, 0xBF);
+
+ rv |= chg_write8(chgnum, 0x52, 0x77);
+ rv |= chg_write8(chgnum, 0x53, 0xD2);
+ rv |= chg_write8(chgnum, 0x54, 0x02);
+ rv |= chg_write8(chgnum, 0x55, 0xD1);
+ rv |= chg_write8(chgnum, 0x56, 0x7F);
+ rv |= chg_write8(chgnum, 0x57, 0x02);
+ rv |= chg_write8(chgnum, 0x58, 0xD1);
+ rv |= chg_write8(chgnum, 0x59, 0x7F);
+ rv |= chg_write8(chgnum, 0x5A, 0x13);
+ rv |= chg_write8(chgnum, 0x5B, 0x50);
+ rv |= chg_write8(chgnum, 0x5D, 0xB0);
+
+ rv |= chg_write8(chgnum, 0x60, 0x44);
+ rv |= chg_write8(chgnum, 0x65, 0x35);
+ rv |= chg_write8(chgnum, 0x66, 0x29);
+
+ rv |= chg_write8(chgnum, 0x7E, 0x04);
+
+ rv |= chg_write8(chgnum, 0x33, 0x3C);
+ }
}
/* Set default input current */
diff --git a/driver/charger/sm5803.h b/driver/charger/sm5803.h
index 00808e3ded..179416d913 100644
--- a/driver/charger/sm5803.h
+++ b/driver/charger/sm5803.h
@@ -76,6 +76,9 @@
#define SM5803_INT_CLEAR_MODE BIT(1)
#define SM5803_INT_MASK_MODE BIT(2)
+#define SM5803_REG_PLATFORM 0x18
+#define SM5803_PLATFORM_ID GENMASK(4, 0)
+
#define SM5803_REG_REFERENCE 0x20
#define SM5803_REFERENCE_LDO3P3_PGOOD BIT(4)
#define SM5803_REFERENCE_LDO5_PGOOD BIT(5)