From 6b0fd886119cc1758d0b327bd53c413a39153de2 Mon Sep 17 00:00:00 2001 From: David Hendricks Date: Tue, 21 Jun 2016 16:11:58 -0700 Subject: anx74xx: allow anx74xx_tcpm_mux_set() to disable mux This handles the case where we wish to disable the mux. Without this the "else" case will return EC_ERROR_UNIMPLEMENTED when we transition to the PD_STATE_SRC_DISCONNECTED state, and the EC console shows "Error setting mux port(0)." BUG=none BRANCH=none TEST=no longer see "Error setting mux port(0)" on Reef EC console Change-Id: I97f35775a5c92636ede1b32293b3a4d01e002dc0 Signed-off-by: David Hendricks Reviewed-on: https://chromium-review.googlesource.com/354680 Tested-by: Kevin K Wong Reviewed-by: Kevin K Wong Reviewed-by: Shawn N --- driver/tcpm/anx74xx.c | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/driver/tcpm/anx74xx.c b/driver/tcpm/anx74xx.c index 13d1bb1c07..652259ef1a 100644 --- a/driver/tcpm/anx74xx.c +++ b/driver/tcpm/anx74xx.c @@ -133,6 +133,23 @@ static int anx74xx_tcpm_mux_init(int i2c_addr) return EC_SUCCESS; } +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); + if (rv) + return EC_ERROR_UNKNOWN; + return rv; +} + static int anx74xx_tcpm_mux_set(int i2c_addr, mux_state_t mux_state) { int reg = 0, val = 0; @@ -162,6 +179,8 @@ static int anx74xx_tcpm_mux_set(int i2c_addr, mux_state_t mux_state) val = ANX74XX_REG_MUX_DP_MODE_ACE_CC1; reg |= ANX74XX_REG_MUX_ML2_A; } + } else if (!mux_state) { + return anx74xx_tcpm_mux_exit(port); } else { return EC_ERROR_UNIMPLEMENTED; } @@ -183,23 +202,6 @@ static int anx74xx_tcpm_mux_get(int i2c_addr, mux_state_t *mux_state) return EC_SUCCESS; } -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); - if (rv) - return EC_ERROR_UNKNOWN; - return rv; -} - const struct usb_mux_driver anx74xx_tcpm_usb_mux_driver = { .init = anx74xx_tcpm_mux_init, .set = anx74xx_tcpm_mux_set, -- cgit v1.2.1