summaryrefslogtreecommitdiff
path: root/driver/charger/bd9995x.c
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 /driver/charger/bd9995x.c
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>
Diffstat (limited to 'driver/charger/bd9995x.c')
-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);