arm64: dts: allwinner: h616: OrangePi Zero 2: Add USB nodes
authorAndre Przywara <andre.przywara@arm.com>
Mon, 31 Oct 2022 11:13:57 +0000 (11:13 +0000)
committerJernej Skrabec <jernej.skrabec@gmail.com>
Mon, 7 Nov 2022 19:07:59 +0000 (20:07 +0100)
The OrangePi Zero 2 has one USB-A host port, VBUS is provided by
a GPIO controlled regulator.
The USB-C port is meant to power the board, but is also connected to
the USB 0 port, which we configure as an MUSB peripheral.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com>
Link: https://lore.kernel.org/r/20221031111358.3387297-7-andre.przywara@arm.com
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
arch/arm64/boot/dts/allwinner/sun50i-h616-orangepi-zero2.dts

index 02893f3..cb8600d 100644 (file)
                regulator-max-microvolt = <5000000>;
                regulator-always-on;
        };
+
+       reg_usb1_vbus: regulator-usb1-vbus {
+               compatible = "regulator-fixed";
+               regulator-name = "usb1-vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               vin-supply = <&reg_vcc5v>;
+               enable-active-high;
+               gpio = <&pio 2 16 GPIO_ACTIVE_HIGH>; /* PC16 */
+       };
 };
 
+&ehci1 {
+       status = "okay";
+};
+
+/* USB 2 & 3 are on headers only. */
+
 &emac0 {
        pinctrl-names = "default";
        pinctrl-0 = <&ext_rgmii_pins>;
        status = "okay";
 };
 
+&ohci1 {
+       status = "okay";
+};
+
 &r_rsb {
        status = "okay";
 
        pinctrl-0 = <&uart0_ph_pins>;
        status = "okay";
 };
+
+&usbotg {
+       /*
+        * PHY0 pins are connected to a USB-C socket, but a role switch
+        * is not implemented: both CC pins are pulled to GND.
+        * The VBUS pins power the device, so a fixed peripheral mode
+        * is the best choice.
+        * The board can be powered via GPIOs, in this case port0 *can*
+        * act as a host (with a cable/adapter ignoring CC), as VBUS is
+        * then provided by the GPIOs. Any user of this setup would
+        * need to adjust the DT accordingly: dr_mode set to "host",
+        * enabling OHCI0 and EHCI0.
+        */
+       dr_mode = "peripheral";
+       status = "okay";
+};
+
+&usbphy {
+       usb1_vbus-supply = <&reg_usb1_vbus>;
+       status = "okay";
+};