]> www.infradead.org Git - users/hch/misc.git/commitdiff
arm64: dts: rockchip: add USB-C support for ROCK 5B/5B+/5T
authorSebastian Reichel <sebastian.reichel@collabora.com>
Tue, 19 Aug 2025 14:50:13 +0000 (16:50 +0200)
committerHeiko Stuebner <heiko@sntech.de>
Sun, 24 Aug 2025 07:04:14 +0000 (09:04 +0200)
Add hardware description for the USB-C port in the Radxa ROCK 5 Model B
family. This describes the OHCI, EHCI and XHCI USB parts. The DisplayPort
AltMode is only partially described, as bindings for the necessary
DisplayPort controller are still being reviewed.

Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Link: https://lore.kernel.org/r/20250819-rock5bp-for-upstream-v4-1-7a2365ce7176@kernel.org
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 612808d2b4c5d4c0de998798a0ce3002f64b32e0..3bbe78810ec6f279a36d51d2fcef4a0f3f53036b 100644 (file)
@@ -5,6 +5,7 @@
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/leds/common.h>
 #include <dt-bindings/soc/rockchip,vop2.h>
+#include <dt-bindings/usb/pd.h>
 #include "rk3588.dtsi"
 
 / {
                shutdown-gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>;
        };
 
+       vbus5v0_typec: vbus5v0-typec {
+               compatible = "regulator-fixed";
+               enable-active-high;
+               gpio = <&gpio2 RK_PB6 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&vbus5v0_typec_en>;
+               regulator-name = "vbus5v0_typec";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               vin-supply = <&vcc5v0_sys>;
+       };
+
        vcc3v3_pcie2x1l0: regulator-vcc3v3-pcie2x1l0 {
                compatible = "regulator-fixed";
                enable-active-high;
        };
 };
 
+&i2c4 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&i2c4m1_xfer>;
+       status = "okay";
+
+       usbc0: usb-typec@22 {
+               compatible = "fcs,fusb302";
+               reg = <0x22>;
+               interrupt-parent = <&gpio3>;
+               interrupts = <RK_PB4 IRQ_TYPE_LEVEL_LOW>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&usbc0_int>;
+               vbus-supply = <&vbus5v0_typec>;
+               /*
+                * When the board is starting to send power-delivery messages
+                * too late (5 seconds according to the specification), the
+                * power-supply reacts with a hard-reset. That removes the
+                * power from VBUS for some time, which resets te whole board.
+                */
+               status = "fail";
+
+               usb_con: connector {
+                       compatible = "usb-c-connector";
+                       label = "USB-C";
+                       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)>;
+
+                       altmodes {
+                               displayport {
+                                       svid = /bits/ 16 <0xff01>;
+                                       vdo = <0xffffffff>;
+                               };
+                       };
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@0 {
+                                       reg = <0>;
+                                       usbc0_hs: endpoint {
+                                               remote-endpoint = <&usb_host0_xhci_to_usbc0>;
+                                       };
+                               };
+
+                               port@1 {
+                                       reg = <1>;
+                                       usbc0_ss: endpoint {
+                                               remote-endpoint = <&usbdp_phy0_ss>;
+                                       };
+                               };
+
+                               port@2 {
+                                       reg = <2>;
+                                       usbc0_sbu: endpoint {
+                                               remote-endpoint = <&usbdp_phy0_sbu>;
+                                       };
+                               };
+                       };
+               };
+       };
+};
+
 &i2c6 {
        status = "okay";
 
                        rockchip,pins = <1 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>;
                };
        };
+
+       usb {
+               usbc0_int: usbc0-int {
+                       rockchip,pins = <3 RK_PB4 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+
+               vbus5v0_typec_en: vbus5v0-typec-en {
+                       rockchip,pins = <2 RK_PB6 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
 };
 
 &pwm1 {
        status = "okay";
 };
 
+&u2phy0 {
+       status = "okay";
+};
+
+&u2phy0_otg {
+       status = "okay";
+};
+
 &u2phy1 {
        status = "okay";
 };
        status = "okay";
 };
 
+&usbdp_phy0 {
+       mode-switch;
+       orientation-switch;
+       status = "okay";
+
+       port {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               usbdp_phy0_ss: endpoint@0 {
+                       reg = <0>;
+                       remote-endpoint = <&usbc0_ss>;
+               };
+
+               usbdp_phy0_sbu: endpoint@1 {
+                       reg = <1>;
+                       remote-endpoint = <&usbc0_sbu>;
+               };
+       };
+};
+
 &usbdp_phy1 {
        status = "okay";
 };
        status = "okay";
 };
 
+&usb_host0_xhci {
+       usb-role-switch;
+       status = "okay";
+
+       port {
+               usb_host0_xhci_to_usbc0: endpoint {
+                       remote-endpoint = <&usbc0_hs>;
+               };
+       };
+};
+
 &usb_host1_ehci {
        status = "okay";
 };
index 74c7b6502e4dda4b774f43c704ebaee350703c0d..5e984a44120e4086fce9e7b72b3db1feaa820275 100644 (file)
        };
 
        usb {
+               usbc_sbu_dc: usbc-sbu-dc {
+                       rockchip,pins = <0 RK_PC4 RK_FUNC_GPIO &pcfg_pull_none>,
+                                       <0 RK_PC5 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+
                vcc5v0_host_en: vcc5v0-host-en {
                        rockchip,pins = <1 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>;
                };
        };
 };
 
+&usbdp_phy0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&usbc_sbu_dc>;
+       sbu1-dc-gpios = <&gpio0 RK_PC4 GPIO_ACTIVE_HIGH>;
+       sbu2-dc-gpios = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>;
+};
+
 &vcc5v0_host {
        enable-active-high;
        gpio = <&gpio1 RK_PA1 GPIO_ACTIVE_HIGH>;
index 9407a7c9910ada1f6c803d2e15785a9cbd9bd655..8ef01010d985bab42db33f88e5e50a3e96053288 100644 (file)
 
 &pinctrl {
        usb {
+               usbc_sbu_dc: usbc-sbu-dc {
+                       rockchip,pins = <4 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>,
+                                       <4 RK_PA7 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+
                vcc5v0_host_en: vcc5v0-host-en {
                        rockchip,pins = <4 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
                };
        };
 };
 
+&usbdp_phy0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&usbc_sbu_dc>;
+       sbu1-dc-gpios = <&gpio4 RK_PA6 GPIO_ACTIVE_HIGH>;
+       sbu2-dc-gpios = <&gpio4 RK_PA7 GPIO_ACTIVE_HIGH>;
+};
+
 &vcc5v0_host {
        enable-active-high;
        gpio = <&gpio4 RK_PB0 GPIO_ACTIVE_HIGH>;
index 258c7400301d7f77517197ab433946bbfa39cf63..217954767845a73c7462a71c27c724f1309144eb 100644 (file)
                        rockchip,pins = <4 RK_PC3 RK_FUNC_GPIO &pcfg_pull_none>;
                };
        };
+
+       usb {
+               usbc_sbu_dc: usbc-sbu-dc {
+                       rockchip,pins = <0 RK_PC4 RK_FUNC_GPIO &pcfg_pull_none>,
+                                       <0 RK_PC5 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+};
+
+&usbdp_phy0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&usbc_sbu_dc>;
+       sbu1-dc-gpios = <&gpio0 RK_PC4 GPIO_ACTIVE_HIGH>;
+       sbu2-dc-gpios = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>;
 };
 
 &vcc3v3_pcie2x1l0 {