From 7f70ae4585433c1647790bf18523e9b8f3a5864d Mon Sep 17 00:00:00 2001 From: Shawn Nematbakhsh Date: Wed, 28 Sep 2016 09:39:05 -0700 Subject: 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 Change-Id: Id16273ccf2e39b5aae7776d626aae8863e713df5 Reviewed-on: https://chromium-review.googlesource.com/390318 Commit-Ready: Shawn N Tested-by: Shawn N Reviewed-by: Aseda Aboagye --- driver/charger/bd9995x.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'driver') 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); -- cgit v1.2.1