diff options
author | Shawn Nematbakhsh <shawnn@chromium.org> | 2016-09-28 09:39:05 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-09-28 22:09:27 -0700 |
commit | 7f70ae4585433c1647790bf18523e9b8f3a5864d (patch) | |
tree | 735665fbd2a81c3330e5b38ebaef5c48cb982df5 /driver | |
parent | a5f66d9658ba13b19542fcb65e00396225256b1c (diff) | |
download | chrome-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')
-rw-r--r-- | driver/charger/bd9995x.c | 10 |
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); |