summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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,