summaryrefslogtreecommitdiff
path: root/driver/tcpm/ps8xxx.c
diff options
context:
space:
mode:
Diffstat (limited to 'driver/tcpm/ps8xxx.c')
-rw-r--r--driver/tcpm/ps8xxx.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/driver/tcpm/ps8xxx.c b/driver/tcpm/ps8xxx.c
index 3cb6903e5b..1ffb18a2c3 100644
--- a/driver/tcpm/ps8xxx.c
+++ b/driver/tcpm/ps8xxx.c
@@ -207,6 +207,21 @@ struct i2c_stress_test_dev ps8xxx_i2c_stress_test_dev = {
};
#endif /* CONFIG_CMD_I2C_STRESS_TEST_TCPC */
+static int ps8xxx_mux_init(int port)
+{
+ tcpci_tcpm_mux_init(port);
+
+ /* If this MUX is also the TCPC, then skip init */
+ if (!(usb_muxes[port].flags & USB_MUX_FLAG_NOT_TCPC))
+ return EC_SUCCESS;
+
+ /* We always want to be a sink when this device is only being used as a mux
+ * to support external peripherals better.
+ */
+ return mux_write(port, TCPC_REG_ROLE_CTRL,
+ TCPC_REG_ROLE_CTRL_SET(0, 1, TYPEC_CC_RD, TYPEC_CC_RD));
+}
+
static int ps8xxx_mux_enter_low_power_mode(int port)
{
mux_write(port, TCPC_REG_ROLE_CTRL,
@@ -214,8 +229,9 @@ static int ps8xxx_mux_enter_low_power_mode(int port)
return tcpci_tcpm_mux_enter_low_power(port);
}
+/* This is meant for mux-only applications */
const struct usb_mux_driver ps8xxx_usb_mux_driver = {
- .init = &tcpci_tcpm_mux_init,
+ .init = &ps8xxx_mux_init,
.set = &tcpci_tcpm_mux_set,
.get = &tcpci_tcpm_mux_get,
.enter_low_power_mode = &ps8xxx_mux_enter_low_power_mode,