summaryrefslogtreecommitdiff
path: root/driver/charger/sm5803.c
diff options
context:
space:
mode:
authorDiana Z <dzigterman@chromium.org>2020-09-22 23:04:09 -0600
committerCommit Bot <commit-bot@chromium.org>2020-09-25 18:42:03 +0000
commit87ec8e1ea0189a5d1bd1c9e1397b9753d92bd8a3 (patch)
tree9db3d7a46403bd5f852ced891707d670d8e9bb42 /driver/charger/sm5803.c
parent2be4a0f80900b3c8f2799471846fce9190c3c0b3 (diff)
downloadchrome-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.c9
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, &reg);
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,