]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
arm64: dts: rockchip: Fix USB Type-C host mode for Radxa ROCK 5B+/5T
authorFUKAUMI Naoki <naoki@radxa.com>
Tue, 4 Nov 2025 08:52:27 +0000 (08:52 +0000)
committerHeiko Stuebner <heiko@sntech.de>
Thu, 6 Nov 2025 22:32:21 +0000 (23:32 +0100)
The Radxa ROCK 5B+/5T USB Type-C port supports Dual Role Data and
should also act as a host. However, currently, when acting as a host,
only self-powered devices work.

Since the ROCK 5B+ supports Dual Role Power, set the power-role
property to "dual" and the try-power-role property to "sink". (along
with related properties)

The ROCK 5T should only support the "source" power-role.

This allows the port to act as a host, supply power to the port, and
allow bus-powered devices to work.

Note that on the ROCK 5T, with this patch applied, it has been
observed that some bus-powered devices do not work correctly. Also,
it has been observed that after connecting a device (and the data-role
switches to host), connecting a host device does not switch the
data-role back to the device role. These issues should be addressed
separately.

Note that there is a separate known issue where USB 3.0 SuperSpeed
devices do not work when oriented in reverse. This issue should also be
addressed separately. (USB 2.0/1.1 devices work in both orientations)

Fixes: 67b2c15d8fb3c ("arm64: dts: rockchip: add USB-C support for ROCK 5B/5B+/5T")
Signed-off-by: FUKAUMI Naoki <naoki@radxa.com>
Link: https://patch.msgid.link/20251104085227.820-1-naoki@radxa.com
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
arch/arm64/boot/dts/rockchip/rk3588-rock-5b-5bp-5t.dtsi
arch/arm64/boot/dts/rockchip/rk3588-rock-5b-plus.dts
arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
arch/arm64/boot/dts/rockchip/rk3588-rock-5t.dts

index 3bbe78810ec6f279a36d51d2fcef4a0f3f53036b..7aac77dfc5f16521755e9d9999053594ca6826e2 100644 (file)
                        data-role = "dual";
                        /* fusb302 supports PD Rev 2.0 Ver 1.2 */
                        pd-revision = /bits/ 8 <0x2 0x0 0x1 0x2>;
-                       power-role = "sink";
-                       try-power-role = "sink";
                        op-sink-microwatt = <1000000>;
                        sink-pdos =
                                <PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)>,
                                <PDO_VAR(5000, 20000, 5000)>;
+                       source-pdos =
+                               <PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)>;
 
                        altmodes {
                                displayport {
index 5e984a44120e4086fce9e7b72b3db1feaa820275..07a840d9b385959d7e4d07aa70a077b85c444656 100644 (file)
        };
 };
 
+&usb_con {
+       power-role = "dual";
+       try-power-role = "sink";
+};
+
 &usbdp_phy0 {
        pinctrl-names = "default";
        pinctrl-0 = <&usbc_sbu_dc>;
index 8ef01010d985bab42db33f88e5e50a3e96053288..da13dafcbc823b8b732f6b162ff2e15d9ea0532d 100644 (file)
        };
 };
 
+&usb_con {
+       power-role = "sink";
+};
+
 &usbdp_phy0 {
        pinctrl-names = "default";
        pinctrl-0 = <&usbc_sbu_dc>;
index c1763835f53d485d06fa2fd51a11e1599f72da16..0dd90c744380b7797beaaad3082b2da2d88cb35a 100644 (file)
        };
 };
 
+&usb_con {
+       power-role = "source";
+};
+
 &usbdp_phy0 {
        pinctrl-names = "default";
        pinctrl-0 = <&usbc_sbu_dc>;