diff options
author | David Hendricks <dhendrix@chromium.org> | 2016-06-21 16:11:58 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-06-29 21:32:21 -0700 |
commit | 6b0fd886119cc1758d0b327bd53c413a39153de2 (patch) | |
tree | 9802459c4c38598e70f0aaab077ac50c91f1b76d /driver | |
parent | 3ddad908729d98fe8b60452fc9b2a65c9857962c (diff) | |
download | chrome-ec-6b0fd886119cc1758d0b327bd53c413a39153de2.tar.gz |
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 <dhendrix@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/354680
Tested-by: Kevin K Wong <kevin.k.wong@intel.com>
Reviewed-by: Kevin K Wong <kevin.k.wong@intel.com>
Reviewed-by: Shawn N <shawnn@chromium.org>
Diffstat (limited to 'driver')
-rw-r--r-- | driver/tcpm/anx74xx.c | 36 |
1 files 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, |