diff mbox series

ARM: dts: exynos: Enable DWC2 dual-role support on OdroidU3+ boards

Message ID 20201103140214.21690-1-m.szyprowski@samsung.com (mailing list archive)
State Accepted
Headers show
Series ARM: dts: exynos: Enable DWC2 dual-role support on OdroidU3+ boards | expand

Commit Message

Marek Szyprowski Nov. 3, 2020, 2:02 p.m. UTC
MicroUSB port on OdroidU3+ boards can operate both as peripheral or as
host port. Till now it was configured as pheriperal only port, but it
turned out that the DWC2 driver code already handles everything needed to
support USB role-switch, so switch it to dual-role (OTG) mode. This has
no effect on OdroidU3 (with 'plus') and OdroidX2, which doesn't have USB
needed ID pin and VBUS wiring. Those will still operate correctly in
pheriperal mode only.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
---
 arch/arm/boot/dts/exynos4412-odroid-common.dtsi |  1 -
 arch/arm/boot/dts/exynos4412-odroidu3.dts       | 14 ++++++++++++++
 arch/arm/boot/dts/exynos4412-odroidx.dts        |  4 ++++
 3 files changed, 18 insertions(+), 1 deletion(-)

Comments

Marek Szyprowski Nov. 3, 2020, 9:24 p.m. UTC | #1
On 03.11.2020 15:02, Marek Szyprowski wrote:
> MicroUSB port on OdroidU3+ boards can operate both as peripheral or as
> host port. Till now it was configured as pheriperal only port, but it
> turned out that the DWC2 driver code already handles everything needed to
> support USB role-switch, so switch it to dual-role (OTG) mode. This has
> no effect on OdroidU3 (with 'plus') and OdroidX2, which doesn't have USB
/s/with/without
> needed ID pin and VBUS wiring. Those will still operate correctly in
> pheriperal mode only.
>
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
>   arch/arm/boot/dts/exynos4412-odroid-common.dtsi |  1 -
>   arch/arm/boot/dts/exynos4412-odroidu3.dts       | 14 ++++++++++++++
>   arch/arm/boot/dts/exynos4412-odroidx.dts        |  4 ++++
>   3 files changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi
> index 2a6f5b1d7645..2b20d9095d9f 100644
> --- a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi
> +++ b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi
> @@ -255,7 +255,6 @@
>   };
>   
>   &hsotg {
> -	dr_mode = "peripheral";
>   	status = "okay";
>   	vusb_d-supply = <&ldo15_reg>;
>   	vusb_a-supply = <&ldo12_reg>;
> diff --git a/arch/arm/boot/dts/exynos4412-odroidu3.dts b/arch/arm/boot/dts/exynos4412-odroidu3.dts
> index b8549d846f86..746c2a99a83c 100644
> --- a/arch/arm/boot/dts/exynos4412-odroidu3.dts
> +++ b/arch/arm/boot/dts/exynos4412-odroidu3.dts
> @@ -21,6 +21,15 @@
>   		reg = <0x40000000 0x7FF00000>;
>   	};
>   
> +	vbus_otg_reg: voltage-regulator-1 {
> +		compatible = "regulator-fixed";
> +		regulator-name = "VBUS_VDD_5.0V";
> +		regulator-min-microvolt = <5000000>;
> +		regulator-max-microvolt = <5000000>;
> +		gpio = <&gpl2 0 GPIO_ACTIVE_HIGH>;
> +		enable-active-high;
> +	};
> +
>   	leds {
>   		compatible = "gpio-leds";
>   		led1 {
> @@ -105,6 +114,11 @@
>   	phy-names = "hsic0", "hsic1";
>   };
>   
> +&hsotg {
> +	dr_mode = "otg";
> +	vbus-supply = <&vbus_otg_reg>;
> +};
> +
>   &sound {
>   	model = "Odroid-U3";
>   	samsung,audio-widgets =
> diff --git a/arch/arm/boot/dts/exynos4412-odroidx.dts b/arch/arm/boot/dts/exynos4412-odroidx.dts
> index 46381e9097f4..d6ee62bf336c 100644
> --- a/arch/arm/boot/dts/exynos4412-odroidx.dts
> +++ b/arch/arm/boot/dts/exynos4412-odroidx.dts
> @@ -76,6 +76,10 @@
>   	};
>   };
>   
> +&hsotg {
> +	dr_mode = "peripheral";
> +};
> +
>   &mshc_0 {
>   	vqmmc-supply = <&buck8_reg>;
>   };

Best regards
Anand Moon Nov. 5, 2020, 7:48 a.m. UTC | #2
Hi Marek,

On Wed, 4 Nov 2020 at 02:56, Marek Szyprowski <m.szyprowski@samsung.com> wrote:
>
> On 03.11.2020 15:02, Marek Szyprowski wrote:
> > MicroUSB port on OdroidU3+ boards can operate both as peripheral or as
> > host port. Till now it was configured as pheriperal only port, but it
> > turned out that the DWC2 driver code already handles everything needed to
> > support USB role-switch, so switch it to dual-role (OTG) mode. This has
> > no effect on OdroidU3 (with 'plus') and OdroidX2, which doesn't have USB
> /s/with/without
> > needed ID pin and VBUS wiring. Those will still operate correctly in
> > pheriperal mode only.
> >
> > Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> > ---

Thanks I have tested this patch on Odroid U3+
it enable the otg port

[alarm@archl-u3et ~]$ lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=exynos-ehci/3p, 480M
    |__ Port 2: Dev 2, If 0, Class=Vendor Specific Class, Driver=smsc95xx, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc2/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 480M

Please add my
Tested-by: Anand Moon <linux.amoon@gmail.com>

Best Regards
Anand
Krzysztof Kozlowski Nov. 5, 2020, 7:10 p.m. UTC | #3
On Tue, Nov 03, 2020 at 03:02:14PM +0100, Marek Szyprowski wrote:
> MicroUSB port on OdroidU3+ boards can operate both as peripheral or as
> host port. Till now it was configured as pheriperal only port, but it
> turned out that the DWC2 driver code already handles everything needed to
> support USB role-switch, so switch it to dual-role (OTG) mode. This has
> no effect on OdroidU3 (with 'plus') and OdroidX2, which doesn't have USB
> needed ID pin and VBUS wiring. Those will still operate correctly in
> pheriperal mode only.
> 
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
>  arch/arm/boot/dts/exynos4412-odroid-common.dtsi |  1 -
>  arch/arm/boot/dts/exynos4412-odroidu3.dts       | 14 ++++++++++++++
>  arch/arm/boot/dts/exynos4412-odroidx.dts        |  4 ++++

Thanks, applied with corrected 'without', Anand's tag and node named
just "regulator-1" (X has one and it is more generic).

Best regards,
Krzysztof
diff mbox series

Patch

diff --git a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi
index 2a6f5b1d7645..2b20d9095d9f 100644
--- a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi
+++ b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi
@@ -255,7 +255,6 @@ 
 };
 
 &hsotg {
-	dr_mode = "peripheral";
 	status = "okay";
 	vusb_d-supply = <&ldo15_reg>;
 	vusb_a-supply = <&ldo12_reg>;
diff --git a/arch/arm/boot/dts/exynos4412-odroidu3.dts b/arch/arm/boot/dts/exynos4412-odroidu3.dts
index b8549d846f86..746c2a99a83c 100644
--- a/arch/arm/boot/dts/exynos4412-odroidu3.dts
+++ b/arch/arm/boot/dts/exynos4412-odroidu3.dts
@@ -21,6 +21,15 @@ 
 		reg = <0x40000000 0x7FF00000>;
 	};
 
+	vbus_otg_reg: voltage-regulator-1 {
+		compatible = "regulator-fixed";
+		regulator-name = "VBUS_VDD_5.0V";
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+		gpio = <&gpl2 0 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+	};
+
 	leds {
 		compatible = "gpio-leds";
 		led1 {
@@ -105,6 +114,11 @@ 
 	phy-names = "hsic0", "hsic1";
 };
 
+&hsotg {
+	dr_mode = "otg";
+	vbus-supply = <&vbus_otg_reg>;
+};
+
 &sound {
 	model = "Odroid-U3";
 	samsung,audio-widgets =
diff --git a/arch/arm/boot/dts/exynos4412-odroidx.dts b/arch/arm/boot/dts/exynos4412-odroidx.dts
index 46381e9097f4..d6ee62bf336c 100644
--- a/arch/arm/boot/dts/exynos4412-odroidx.dts
+++ b/arch/arm/boot/dts/exynos4412-odroidx.dts
@@ -76,6 +76,10 @@ 
 	};
 };
 
+&hsotg {
+	dr_mode = "peripheral";
+};
+
 &mshc_0 {
 	vqmmc-supply = <&buck8_reg>;
 };