diff options
author | Diana Z <dzigterman@chromium.org> | 2020-09-22 23:04:09 -0600 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-09-25 18:42:03 +0000 |
commit | 87ec8e1ea0189a5d1bd1c9e1397b9753d92bd8a3 (patch) | |
tree | 9db3d7a46403bd5f852ced891707d670d8e9bb42 /driver/charger/sm5803.c | |
parent | 2be4a0f80900b3c8f2799471846fce9190c3c0b3 (diff) | |
download | chrome-ec-87ec8e1ea0189a5d1bd1c9e1397b9753d92bd8a3.tar.gz |
SM5803: Read-modify-write output current register
This commit fixes an issue with the output current overwriting the init
value for bit 7 in its register.
BRANCH=None
BUG=b:168931726
TEST=on waddledee, plug in port partner and verify bit 7 is still set
from init time
Signed-off-by: Diana Z <dzigterman@chromium.org>
Change-Id: Idba11e01293d2749ae6769ece9aa059f16645e2b
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2426563
Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Diffstat (limited to 'driver/charger/sm5803.c')
-rw-r--r-- | driver/charger/sm5803.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/driver/charger/sm5803.c b/driver/charger/sm5803.c index 207404f96f..c39e601ac4 100644 --- a/driver/charger/sm5803.c +++ b/driver/charger/sm5803.c @@ -1187,12 +1187,15 @@ static enum ec_error_list sm5803_set_otg_current_voltage(int chgnum, enum ec_error_list rv; int reg; - reg = (output_current / SM5803_CLS_CURRENT_STEP) & - SM5803_DISCH_CONF5_CLS_LIMIT; - rv = chg_write8(chgnum, SM5803_REG_DISCH_CONF5, reg); + rv = chg_read8(chgnum, SM5803_REG_DISCH_CONF5, ®); if (rv) return rv; + reg &= ~SM5803_DISCH_CONF5_CLS_LIMIT; + reg |= MIN((output_current / SM5803_CLS_CURRENT_STEP), + SM5803_DISCH_CONF5_CLS_LIMIT); + rv |= chg_write8(chgnum, SM5803_REG_DISCH_CONF5, reg); + reg = SM5803_VOLTAGE_TO_REG(output_voltage); rv = chg_write8(chgnum, SM5803_REG_VPWR_MSB, (reg >> 3)); rv |= chg_write8(chgnum, SM5803_REG_DISCH_CONF2, |