[PATCH v2 1/2] arm64: dts: rockchip: Fix USB Type-C host mode for Radxa ROCK 5B+/5T
Heiko Stuebner
heiko at sntech.de
Sat Nov 1 04:51:35 PDT 2025
Hi,
Am Mittwoch, 29. Oktober 2025, 14:01:59 Mitteleuropäische Normalzeit schrieb FUKAUMI Naoki:
> 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, but when the
> power-role property is set to "source", when acting as a host, only
> self-powered devices work. As a workaround, set the power-role
> property to "dual" and the try-power-role property to "sink".
>
> This allows the port to act as a host, supply power to the port, and
> allow bus-powered devices to work.
So it sounds like you're working around an issue coming from the Linux
usb stack here? If the usb stack handles those power roles wrongly
shouldn't it be fixed instead of introducing wrong hacks to generic
hardware descriptions?
Like Linux isn't the only consumer of Devicetrees, so hacking them
together to walk around driver issues feels wrong.
Heiko
> Note that there is a separate known issue where USB 3.0 SuperSpeed
> devices do not work when oriented in reverse. This issue should 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 at radxa.com>
> ---
> Changes in v2:
> - Refine commit message
> - Use board-specific dts to describe (try-)power-role
> ---
> arch/arm64/boot/dts/rockchip/rk3588-rock-5b-5bp-5t.dtsi | 4 ++--
> arch/arm64/boot/dts/rockchip/rk3588-rock-5b-plus.dts | 5 +++++
> arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts | 4 ++++
> arch/arm64/boot/dts/rockchip/rk3588-rock-5t.dts | 5 +++++
> 4 files changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b-5bp-5t.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b-5bp-5t.dtsi
> index 3bbe78810ec6f..7aac77dfc5f16 100644
> --- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b-5bp-5t.dtsi
> +++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b-5bp-5t.dtsi
> @@ -331,12 +331,12 @@ usb_con: connector {
> 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 {
> diff --git a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b-plus.dts b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b-plus.dts
> index 5e984a44120e4..07a840d9b3859 100644
> --- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b-plus.dts
> +++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b-plus.dts
> @@ -110,6 +110,11 @@ vcc5v0_host_en: vcc5v0-host-en {
> };
> };
>
> +&usb_con {
> + power-role = "dual";
> + try-power-role = "sink";
> +};
> +
> &usbdp_phy0 {
> pinctrl-names = "default";
> pinctrl-0 = <&usbc_sbu_dc>;
> diff --git a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
> index 8ef01010d985b..da13dafcbc823 100644
> --- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
> +++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
> @@ -49,6 +49,10 @@ vcc5v0_host_en: vcc5v0-host-en {
> };
> };
>
> +&usb_con {
> + power-role = "sink";
> +};
> +
> &usbdp_phy0 {
> pinctrl-names = "default";
> pinctrl-0 = <&usbc_sbu_dc>;
> diff --git a/arch/arm64/boot/dts/rockchip/rk3588-rock-5t.dts b/arch/arm64/boot/dts/rockchip/rk3588-rock-5t.dts
> index c1763835f53d4..96ffffec7e05d 100644
> --- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5t.dts
> +++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5t.dts
> @@ -130,6 +130,11 @@ usbc_sbu_dc: usbc-sbu-dc {
> };
> };
>
> +&usb_con {
> + power-role = "dual";
> + try-power-role = "sink";
> +};
> +
> &usbdp_phy0 {
> pinctrl-names = "default";
> pinctrl-0 = <&usbc_sbu_dc>;
>
More information about the Linux-rockchip
mailing list