From 0fbbafc151fd2d08c7aa8400a77c103bd019c245 Mon Sep 17 00:00:00 2001 From: Tang Zhentian1 Date: Fri, 9 Sep 2016 10:49:22 +0800 Subject: tcpm: anx74xx: fix wrong clear CABLE_DET bit in 0x50:43 register. BUG=None TEST=Verify cable detect is correct. BRANCH=None Change-Id: I6eb7c6cd979120835f89bbb68116ddbc03813f3b Signed-off-by: Tang Zhentian1 Reviewed-on: https://chromium-review.googlesource.com/382868 Commit-Ready: Kevin K Wong Tested-by: Kevin K Wong Reviewed-by: Shawn N --- driver/tcpm/anx74xx.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/driver/tcpm/anx74xx.c b/driver/tcpm/anx74xx.c index 8ce164d817..3da89c108c 100644 --- a/driver/tcpm/anx74xx.c +++ b/driver/tcpm/anx74xx.c @@ -144,21 +144,25 @@ static int anx74xx_tcpm_mux_init(int i2c_addr) static int anx74xx_tcpm_mux_exit(int port) { - int rv = EC_SUCCESS; - - rv |= tcpc_write(port, ANX74XX_REG_ANALOG_CTRL_2, - ANX74XX_REG_MODE_TRANS); - rv |= tcpc_write(port, ANX74XX_REG_ANALOG_CTRL_1, - 0x0); - rv |= tcpc_write(port, ANX74XX_REG_ANALOG_CTRL_5, - 0x04); - rv |= tcpc_write(port, ANX74XX_REG_ANALOG_CTRL_2, - 0x0); + int rv = EC_SUCCESS; + int reg = 0x0; + + rv = tcpc_read(port, ANX74XX_REG_ANALOG_CTRL_2, ®); if (rv) return EC_ERROR_UNKNOWN; + + rv |= tcpc_write(port, ANX74XX_REG_ANALOG_CTRL_2, reg | ANX74XX_REG_MODE_TRANS); + rv |= tcpc_write(port, ANX74XX_REG_ANALOG_CTRL_1, 0x0); + rv |= tcpc_write(port, ANX74XX_REG_ANALOG_CTRL_5, 0x04); + rv |= tcpc_write(port, ANX74XX_REG_ANALOG_CTRL_2, reg & 0x09); + if (rv) + return EC_ERROR_UNKNOWN; + return rv; + } + static int anx74xx_set_mux(int port, int polarity) { int reg, rv = EC_SUCCESS; -- cgit v1.2.1