summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2016-09-28 09:39:05 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-09-28 22:09:27 -0700
commit7f70ae4585433c1647790bf18523e9b8f3a5864d (patch)
tree735665fbd2a81c3330e5b38ebaef5c48cb982df5
parenta5f66d9658ba13b19542fcb65e00396225256b1c (diff)
downloadchrome-ec-7f70ae4585433c1647790bf18523e9b8f3a5864d.tar.gz
charger: bd9995x: Reset map command set on failed set operation
If BD9995X_CMD_MAP_SET fails, the charger's internal map command set may be the old set (if the charger failed to process the command) or the new set (if the EC failed to receive the response). Therefore, reset the EC's known map command state on failure, so that it will always be re-set on the next transaction. BUG=None TEST=Build + boot kevin. BRANCH=Kevin Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Change-Id: Id16273ccf2e39b5aae7776d626aae8863e713df5 Reviewed-on: https://chromium-review.googlesource.com/390318 Commit-Ready: Shawn N <shawnn@chromium.org> Tested-by: Shawn N <shawnn@chromium.org> Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
-rw-r--r--driver/charger/bd9995x.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/driver/charger/bd9995x.c b/driver/charger/bd9995x.c
index ff65d8b251..65e7483772 100644
--- a/driver/charger/bd9995x.c
+++ b/driver/charger/bd9995x.c
@@ -67,8 +67,10 @@ static inline int ch_raw_read16(int cmd, int *param,
if (charger_map_cmd != map_cmd) {
rv = i2c_write16(I2C_PORT_CHARGER, I2C_ADDR_CHARGER,
BD9995X_CMD_MAP_SET, map_cmd);
- if (rv)
+ if (rv) {
+ charger_map_cmd = BD9995X_INVALID_COMMAND;
goto bd9995x_read_cleanup;
+ }
charger_map_cmd = map_cmd;
}
@@ -91,8 +93,10 @@ static inline int ch_raw_write16(int cmd, int param,
if (charger_map_cmd != map_cmd) {
rv = i2c_write16(I2C_PORT_CHARGER, I2C_ADDR_CHARGER,
BD9995X_CMD_MAP_SET, map_cmd);
- if (rv)
+ if (rv) {
+ charger_map_cmd = BD9995X_INVALID_COMMAND;
goto bd9995x_write_cleanup;
+ }
charger_map_cmd = map_cmd;
}
@@ -719,7 +723,6 @@ static void bd99995_init(void)
/* Unlock debug regs */
ch_raw_write16(BD9995X_CMD_PROTECT_SET, 0x3c, BD9995X_EXTENDED_COMMAND);
- ch_raw_write16(BD9995X_CMD_MAP_SET, 0x2, BD9995X_EXTENDED_COMMAND);
/* Undocumented - reverse current threshold = -50mV */
ch_raw_write16(0x14, 0x0202, BD9995X_DEBUG_COMMAND);
@@ -728,7 +731,6 @@ static void bd99995_init(void)
/* Re-lock debug regs */
ch_raw_write16(BD9995X_CMD_PROTECT_SET, 0x0, BD9995X_EXTENDED_COMMAND);
- ch_raw_write16(BD9995X_CMD_MAP_SET, 0x1, BD9995X_EXTENDED_COMMAND);
}
DECLARE_HOOK(HOOK_INIT, bd99995_init, HOOK_PRIO_INIT_EXTPOWER);