[PATCH v2 1/2] arm64: dts: rockchip: Fix USB Type-C host mode for Radxa ROCK 5B+/5T

FUKAUMI Naoki naoki at radxa.com
Sun Nov 2 01:02:25 PDT 2025


Hi Heiko,

On 11/1/25 20:51, Heiko Stuebner wrote:
> 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.

You are right. I will amend the patch for the ROCK 5T to set the 
power-role to "source". This will correct the current erroneous setting 
of "sink", surface the problem in the Linux USB stack (which should be 
fixed separately), and allow us to discuss this problem.

Best regards,

--
FUKAUMI Naoki
Radxa Computer (Shenzhen) Co., Ltd.

> 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