[PATCH 1/2] arm64: dts: mediatek: mt8390-genio-common: Fix type C port mode and connection
Chen-Yu Tsai
wenst at chromium.org
Tue Nov 3 00:33:32 PST 2026
The USB controller complex ssusb1 and xhci1 operate in host mode only,
as it is immediately connected to a USB hub. The user manual has a block
diagram showing this, and a USB usage table showing port 1 as "host
only".
Change the controller's operating mode to "host", and drop the USB role
switch property. Fix the USB type C port data line connections to go
through the USB hub, as shown in the block diagram. Change the data-role
on the type C port to "host".
Fixes: 1afaeca17238 ("arm64: dts: mediatek: mt8390-genio-700: Add USB, TypeC Controller, MUX")
Signed-off-by: Chen-Yu Tsai <wenst at chromium.org>
---
Compile tested only.
Unfortunately I don't have a board or the schematics to check which of
the USB hub downstream ports the type C port is connected to.
Also, the order of the USB hubs might be reversed. In my previous
experience, port 1 on the XHCI is SuperSpeed, and port 2 is HighSpeed.
---
.../dts/mediatek/mt8390-genio-common.dtsi | 43 ++++++++++++-------
1 file changed, 28 insertions(+), 15 deletions(-)
diff --git a/arch/arm64/boot/dts/mediatek/mt8390-genio-common.dtsi b/arch/arm64/boot/dts/mediatek/mt8390-genio-common.dtsi
index 669eaec662f3..821dbf9d3fc5 100644
--- a/arch/arm64/boot/dts/mediatek/mt8390-genio-common.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8390-genio-common.dtsi
@@ -512,7 +512,7 @@ rt1715 at 4e {
connector {
compatible = "usb-c-connector";
label = "USB-C";
- data-role = "dual";
+ data-role = "host";
op-sink-microwatt = <10000000>;
power-role = "dual";
try-power-role = "sink";
@@ -539,14 +539,14 @@ ports {
port at 0 {
reg = <0>;
typec_con_hs: endpoint {
- remote-endpoint = <&mtu3_hs1_role_sw>;
+ remote-endpoint = <&usb_2_0_p2>;
};
};
port at 1 {
reg = <1>;
typec_con_ss: endpoint {
- remote-endpoint = <&xhci_ss_ep>;
+ remote-endpoint = <&usb_3_0_p2>;
};
};
@@ -1528,19 +1528,12 @@ &xhci0 {
};
&ssusb1 {
- dr_mode = "otg";
- usb-role-switch;
+ dr_mode = "host";
wakeup-source;
vusb33-supply = <&mt6359_vusb_ldo_reg>;
pinctrl-0 = <&usb1_default_pins>;
pinctrl-names = "default";
status = "okay";
-
- port {
- mtu3_hs1_role_sw: endpoint {
- remote-endpoint = <&typec_con_hs>;
- };
- };
};
&xhci1 {
@@ -1555,6 +1548,19 @@ hub_2_0: hub at 1 {
peer-hub = <&hub_3_0>;
reset-gpios = <&pio 7 GPIO_ACTIVE_HIGH>;
vdd-supply = <&usb_hub_fixed_3v3>;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port at 2 {
+ reg = <2>;
+
+ usb_2_0_p2: endpoint {
+ remote-endpoint = <&typec_con_hs>;
+ };
+ };
+ };
};
hub_3_0: hub at 2 {
@@ -1563,11 +1569,18 @@ hub_3_0: hub at 2 {
peer-hub = <&hub_2_0>;
reset-gpios = <&pio 7 GPIO_ACTIVE_HIGH>;
vdd-supply = <&usb_hub_fixed_3v3>;
- };
- port {
- xhci_ss_ep: endpoint {
- remote-endpoint = <&typec_con_ss>;
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port at 2 {
+ reg = <2>;
+
+ usb_3_0_p2: endpoint {
+ remote-endpoint = <&typec_con_ss>;
+ };
+ };
};
};
};
--
2.56.0.385.gac671c819a-goog
More information about the linux-arm-kernel
mailing list