diff options
author | Diana Z <dzigterman@chromium.org> | 2020-06-16 13:42:19 -0600 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-06-19 04:15:27 +0000 |
commit | 52accf3dabbe1123ac243ad779623ec2cff3c48f (patch) | |
tree | 7bd9f5b58672fe3f3c27600789d8921f03ebc3a0 | |
parent | af403b66288ac4a5a46644e435cc9b8eb381ad10 (diff) | |
download | chrome-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.c | 45 | ||||
-rw-r--r-- | driver/charger/sm5803.h | 3 |
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) |