summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Hendricks <dhendrix@chromium.org>2016-06-21 16:11:58 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-06-29 21:32:21 -0700
commit6b0fd886119cc1758d0b327bd53c413a39153de2 (patch)
tree9802459c4c38598e70f0aaab077ac50c91f1b76d
parent3ddad908729d98fe8b60452fc9b2a65c9857962c (diff)
downloadchrome-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>
-rw-r--r--driver/tcpm/anx74xx.c36
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,