]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
arm64: dts: rockchip: Enable USB 2.0 ports on Radxa E20C
authorJonas Karlman <jonas@kwiboo.se>
Fri, 29 May 2026 19:03:52 +0000 (21:03 +0200)
committerHeiko Stuebner <heiko@sntech.de>
Tue, 2 Jun 2026 20:44:25 +0000 (22:44 +0200)
The Radxa E20C has one USB2.0 Type-A HOST port and one USB2.0 Type-C port.

The Type-C port is conneced to a FE1.1s_QFN USB hub on the board, with its
ports being connected to the XHCI usb controller and an usb-uart bridge.

This also means, the XHCI controller can only be used in device-mode.

Add support for using the USB 2.0 ports on Radxa E20C.

Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
[set xhci to peripheral and add comment about the outward-facing hub]
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Link: https://patch.msgid.link/20260529190355.4148175-3-heiko@sntech.de
arch/arm64/boot/dts/rockchip/rk3528-radxa-e20c.dts

index b32452756155867aa6a447f22460fafadb42a4a3..f872b8d20ebca1db839c363783f02c5c0423a205 100644 (file)
                regulator-max-microvolt = <5000000>;
        };
 
+       vcc5v0_usb20: regulator-5v0-vcc-usb20 {
+               compatible = "regulator-fixed";
+               enable-active-high;
+               gpios = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&usb_host_en>;
+               regulator-name = "vcc5v0_usb20";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               vin-supply = <&vcc5v0_sys>;
+       };
+
        vccio_sd: regulator-vccio-sd {
                compatible = "regulator-gpio";
                gpios = <&gpio4 RK_PB6 GPIO_ACTIVE_HIGH>;
                        rockchip,pins = <4 RK_PB6 RK_FUNC_GPIO &pcfg_pull_none>;
                };
        };
+
+       usb {
+               usb_host_en: usb-host-en {
+                       rockchip,pins = <0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
 };
 
 &pwm1 {
        pinctrl-0 = <&uart0m0_xfer>;
        status = "okay";
 };
+
+&usb_host0_ehci {
+       status = "okay";
+};
+
+&usb_host0_ohci {
+       status = "okay";
+};
+
+/*
+ * The usb controller can only work in peripheral mode, as it is
+ * connected to one of the ports of an outward-facing usb hub.
+ *
+ * type_c-port (hub-input)
+ *          |
+ *       usb-hub
+ *     |         |
+ * uart-usb   usb-host0
+ *     |
+ *   uart0
+ */
+&usb_host0_xhci {
+       dr_mode = "peripheral";
+       extcon = <&usb2phy>;
+       maximum-speed = "high-speed";
+       phys = <&usb2phy_otg>;
+       phy-names = "usb2-phy";
+       status = "okay";
+};
+
+&usb2phy {
+       status = "okay";
+};
+
+&usb2phy_host {
+       phy-supply = <&vcc5v0_usb20>;
+       status = "okay";
+};
+
+&usb2phy_otg {
+       status = "okay";
+};