ARM: sun9i: cubieboard4: Enable USB hosts and LEDs
Subsystems (2)
cover ARM: sun9i: cubieboard4: Enable USB hosts and LEDs
Hi Maxime,
This small series enables USB host and LED support on the Cubieboard4. We already support these on the Optimus, so it's just dts stuff.
Regards
ChenYu
Chen-Yu Tsai (2):
ARM: dts: sun9i: cubieboard4: Enable USB support
ARM: dts: sun9i: cubieboard4: Enable LEDs
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts | 83 +++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+)
Signature · 1 line
2.1.4
PATCH 1/2 ARM: dts: sun9i: cubieboard4: Enable USB support
The Cubieboard4 has 4 USB ports. 3 of them are connected to a GL850G USB hub chip on usb1. The fourth one, the lower port of 2 ports next to the power barrel, is directly connected to usb3.
2 power enable GPIOs are used between the 2 port groups, 1 for each. This raises the possibility of having no power for hub-connected port next to the power barrel, if usb3 is not enabled.
--- arch/arm/boot/dts/sun9i-a80-cubieboard4.dts | 60 +++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+)
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts +60 -0
@@ -62,6 +62,30 @@ stdout-path = "serial0:115200n8"; }; + reg_usb3_vbus: usb3-vbus { + compatible = "regulator-fixed"; + pinctrl-names = "default"; + pinctrl-0 = <&usb3_vbus_pin_cubieboard4>; + regulator-name = "usb3-vbus"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + enable-active-high; + gpio = <&pio 7 15 GPIO_ACTIVE_HIGH>; /* PH15 */ + }; +}; + +&ehci0 { + status = "okay"; +}; + +&ehci2 { + status = "okay"; +}; + +/* usb1 is connected to a GL850G USB hub chip, so no need to enable OHCI */ + +&ohci2 { + status = "okay"; }; &pio {
@@ -71,6 +95,20 @@ allwinner,drive = <SUN4I_PINCTRL_10_MA>; allwinner,pull = <SUN4I_PINCTRL_PULL_UP>; }; + + usb1_vbus_pin_cubieboard4: usb1_vbus_pin at 1 { + allwinner,pins = "PH14"; + allwinner,function = "gpio_out"; + allwinner,drive = <SUN4I_PINCTRL_10_MA>; + allwinner,pull = <SUN4I_PINCTRL_NO_PULL>; + }; + + usb3_vbus_pin_cubieboard4: usb3_vbus_pin at 1 { + allwinner,pins = "PH15"; + allwinner,function = "gpio_out"; + allwinner,drive = <SUN4I_PINCTRL_10_MA>; + allwinner,pull = <SUN4I_PINCTRL_NO_PULL>; + }; }; &mmc0 {
@@ -92,8 +130,30 @@ status = "okay"; }; +®_usb1_vbus { + pinctrl-0 = <&usb1_vbus_pin_cubieboard4>; + gpio = <&pio 7 14 GPIO_ACTIVE_HIGH>; /* PH14 */ + status = "okay"; +}; + &uart0 { pinctrl-names = "default"; pinctrl-0 = <&uart0_pins_a>; status = "okay"; }; + +&usbphy1 { + phy-supply = <®_usb1_vbus>; + status = "okay"; +}; + +/* + * Unfortunately reg_usb1_vbus also powers one of the ports from usb3's hub. + * One should always make sure both regulators are enabled and working for + * all USB ports to have power. + */ + +&usbphy3 { + phy-supply = <®_usb3_vbus>; + status = "okay"; +};
Signature · 1 line
2.1.4
PATCH 1/2 ARM: dts: sun9i: cubieboard4: Enable USB support
Hi,
Quoted 32 lines · Chen-Yu Tsai
The Cubieboard4 has 4 USB ports. 3 of them are connected to a GL850G USB hub chip on usb1. The fourth one, the lower port of 2 ports next to the power barrel, is directly connected to usb3.
2 power enable GPIOs are used between the 2 port groups, 1 for each. This raises the possibility of having no power for hub-connected port next to the power barrel, if usb3 is not enabled.
Signed-off-by Chen-Yu Tsai <[email protected]>--- arch/arm/boot/dts/sun9i-a80-cubieboard4.dts | 60 +++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+)arch/arm/boot/dts/sun9i-a80-cubieboard4.dts +11
-0@@ -62,6 +62,30 @@ stdout-path = "serial0:115200n8"; }; + reg_usb3_vbus: usb3-vbus { + compatible = "regulator-fixed"; + pinctrl-names = "default"; + pinctrl-0 = <&usb3_vbus_pin_cubieboard4>; + regulator-name = "usb3-vbus"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + enable-active-high; + gpio = <&pio 7 15 GPIO_ACTIVE_HIGH>; /* PH15 */ + }; +};
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts line 85
Quoted 10 lines
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts +10
-0+ +&ehci0 { + status = "okay"; +}; + +&ehci2 { + status = "okay"; +}; + +/* usb1 is connected to a GL850G USB hub chip, so no need to enable OHCI */
You're mentionning usb1, but I don't see it enabled anywhere, is that a typo?
Quoted 43 lines
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts +24
-0+ +&ohci2 { + status = "okay"; }; &pio {@@ -71,6 +95,20 @@ allwinner,drive = <SUN4I_PINCTRL_10_MA>; allwinner,pull = <SUN4I_PINCTRL_PULL_UP>; }; + + usb1_vbus_pin_cubieboard4: usb1_vbus_pin at 1 { + allwinner,pins = "PH14"; + allwinner,function = "gpio_out"; + allwinner,drive = <SUN4I_PINCTRL_10_MA>; + allwinner,pull = <SUN4I_PINCTRL_NO_PULL>; + }; + + usb3_vbus_pin_cubieboard4: usb3_vbus_pin at 1 { + allwinner,pins = "PH15"; + allwinner,function = "gpio_out"; + allwinner,drive = <SUN4I_PINCTRL_10_MA>; + allwinner,pull = <SUN4I_PINCTRL_NO_PULL>; + }; }; &mmc0 {@@ -92,8 +130,30 @@ status = "okay"; }; +®_usb1_vbus { + pinctrl-0 = <&usb1_vbus_pin_cubieboard4>; + gpio = <&pio 7 14 GPIO_ACTIVE_HIGH>; /* PH14 */ + status = "okay"; +}; + &uart0 { pinctrl-names = "default"; pinctrl-0 = <&uart0_pins_a>; status = "okay"; }; +
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts line 154
Quoted 10 lines
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts +10
-0+&usbphy1 { + phy-supply = <®_usb1_vbus>; + status = "okay"; +}; + +/* + * Unfortunately reg_usb1_vbus also powers one of the ports from usb3's hub. + * One should always make sure both regulators are enabled and working for + * all USB ports to have power. + */
Can't we just provide the two regulators, and enable both of them so that we know that we always have the needed regulators enabled, disregarding which USB port is used?
Thanks,
Maxime
Signature · 10 lines
Maxime Ripard, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20150508/037b263e/attachment.sig>
PATCH 1/2 ARM: dts: sun9i: cubieboard4: Enable USB support
Quoted 40 lines · Maxime Ripard
Hi,
Quoted 37 lines · Chen-Yu Tsai
The Cubieboard4 has 4 USB ports. 3 of them are connected to a GL850G USB hub chip on usb1. The fourth one, the lower port of 2 ports next to the power barrel, is directly connected to usb3.
2 power enable GPIOs are used between the 2 port groups, 1 for each. This raises the possibility of having no power for hub-connected port next to the power barrel, if usb3 is not enabled.
Signed-off-by Chen-Yu Tsai <[email protected]>--- arch/arm/boot/dts/sun9i-a80-cubieboard4.dts | 60 +++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+)arch/arm/boot/dts/sun9i-a80-cubieboard4.dts +16
-0@@ -62,6 +62,30 @@ stdout-path = "serial0:115200n8"; }; + reg_usb3_vbus: usb3-vbus { + compatible = "regulator-fixed"; + pinctrl-names = "default"; + pinctrl-0 = <&usb3_vbus_pin_cubieboard4>; + regulator-name = "usb3-vbus"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + enable-active-high; + gpio = <&pio 7 15 GPIO_ACTIVE_HIGH>; /* PH15 */ + }; +}; + +&ehci0 { + status = "okay"; +}; +
Quoted 8 lines
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts line 85
Quoted 5 lines
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts +5
-0+&ehci2 { + status = "okay"; +}; + +/* usb1 is connected to a GL850G USB hub chip, so no need to enable OHCI */You're mentionning usb1, but I don't see it enabled anywhere, is that a typo?
usb1 (or usbphy1) == ehci/ohci0. usb0 is otg.
This numbering matches the fex files, and (mostly) matches the specs.
Quoted 49 lines
Quoted 49 lines
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts +30
-0+ +&ohci2 { + status = "okay"; }; &pio {@@ -71,6 +95,20 @@ allwinner,drive = <SUN4I_PINCTRL_10_MA>; allwinner,pull = <SUN4I_PINCTRL_PULL_UP>; }; + + usb1_vbus_pin_cubieboard4: usb1_vbus_pin at 1 { + allwinner,pins = "PH14"; + allwinner,function = "gpio_out"; + allwinner,drive = <SUN4I_PINCTRL_10_MA>; + allwinner,pull = <SUN4I_PINCTRL_NO_PULL>; + }; + + usb3_vbus_pin_cubieboard4: usb3_vbus_pin at 1 { + allwinner,pins = "PH15"; + allwinner,function = "gpio_out"; + allwinner,drive = <SUN4I_PINCTRL_10_MA>; + allwinner,pull = <SUN4I_PINCTRL_NO_PULL>; + }; }; &mmc0 {@@ -92,8 +130,30 @@ status = "okay"; }; +®_usb1_vbus { + pinctrl-0 = <&usb1_vbus_pin_cubieboard4>; + gpio = <&pio 7 14 GPIO_ACTIVE_HIGH>; /* PH14 */ + status = "okay"; +}; + &uart0 { pinctrl-names = "default"; pinctrl-0 = <&uart0_pins_a>; status = "okay"; }; + +&usbphy1 { + phy-supply = <®_usb1_vbus>; + status = "okay"; +}; + +/*
Quoted 8 lines
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts line 154
Quoted 4 lines
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts +4
-0+ * Unfortunately reg_usb1_vbus also powers one of the ports from usb3's hub. + * One should always make sure both regulators are enabled and working for + * all USB ports to have power. + */Can't we just provide the two regulators, and enable both of them so that we know that we always have the needed regulators enabled, disregarding which USB port is used?
Would setting "always-on" for both regulators work for you? Or maybe just the one that's used by both USB hosts?
ChenYu
PATCH 1/2 ARM: dts: sun9i: cubieboard4: Enable USB support
Quoted 13 lines · Chen-Yu Tsai
Quoted 4 lines
Quoted 4 lines
+&ehci0 {
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts +3
-0+ status = "okay"; +}; +Quoted 8 lines
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts line 85
Quoted 5 lines
+&ehci2 {
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts +4
-0+ status = "okay"; +}; + +/* usb1 is connected to a GL850G USB hub chip, so no need to enable OHCI */You're mentionning usb1, but I don't see it enabled anywhere, is that a typo?
Quoted 4 lines
usb1 (or usbphy1) == ehci/ohci0. usb0 is otg.
This numbering matches the fex files, and (mostly) matches the specs.
Ok, having this comment between ehci2 and ohci2 is confusing then :)
It's not the first board that has a hub, we usually don't really care as it's kind of obvious. Maybe we can just remove it?
Quoted 32 lines
Quoted 23 lines
Quoted 23 lines
&mmc0 {
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts +13
-0@@ -92,8 +130,30 @@ status = "okay"; }; +®_usb1_vbus { + pinctrl-0 = <&usb1_vbus_pin_cubieboard4>; + gpio = <&pio 7 14 GPIO_ACTIVE_HIGH>; /* PH14 */ + status = "okay"; +}; + &uart0 { pinctrl-names = "default"; pinctrl-0 = <&uart0_pins_a>; status = "okay"; }; + +&usbphy1 { + phy-supply = <®_usb1_vbus>; + status = "okay"; +}; + +/*Quoted 8 lines
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts line 154
Quoted 4 lines
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts +4
-0+ * Unfortunately reg_usb1_vbus also powers one of the ports from usb3's hub. + * One should always make sure both regulators are enabled and working for + * all USB ports to have power. + */Can't we just provide the two regulators, and enable both of them so that we know that we always have the needed regulators enabled, disregarding which USB port is used?
Quoted 2 lines
Would setting "always-on" for both regulators work for you? Or maybe just the one that's used by both USB hosts?
I was more thinking of giving to the phy an additional regulator, so that it would enable both the regulators needed to power up all ports.
Maxime
Signature · 10 lines
Maxime Ripard, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20150508/3a2d6a1c/attachment.sig>
PATCH 1/2 ARM: dts: sun9i: cubieboard4: Enable USB support
Quoted 16 lines · Maxime Ripard
Quoted 15 lines · Chen-Yu Tsai
Quoted 4 lines
Quoted 4 lines
+&ehci0 {
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts +3
-0+ status = "okay"; +}; +Quoted 8 lines
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts line 85
Quoted 5 lines
+&ehci2 {
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts +4
-0+ status = "okay"; +}; + +/* usb1 is connected to a GL850G USB hub chip, so no need to enable OHCI */You're mentionning usb1, but I don't see it enabled anywhere, is that a typo?
usb1 (or usbphy1) == ehci/ohci0. usb0 is otg.
Quoted 7 lines
Quoted 2 lines
This numbering matches the fex files, and (mostly) matches the specs.
Ok, having this comment between ehci2 and ohci2 is confusing then :)
It's not the first board that has a hub, we usually don't really care as it's kind of obvious. Maybe we can just remove it?
Why not. :)
Quoted 32 lines
Quoted 32 lines
Quoted 31 lines
Quoted 17 lines
&mmc0 {
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts +7
-0@@ -92,8 +130,30 @@ status = "okay"; }; +®_usb1_vbus { + pinctrl-0 = <&usb1_vbus_pin_cubieboard4>; + gpio = <&pio 7 14 GPIO_ACTIVE_HIGH>; /* PH14 */ + status = "okay"; +}; + &uart0 { pinctrl-names = "default"; pinctrl-0 = <&uart0_pins_a>; status = "okay"; }; +arch/arm/boot/dts/sun9i-a80-cubieboard4.dts line 154
Quoted 10 lines
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts +10
-0+&usbphy1 { + phy-supply = <®_usb1_vbus>; + status = "okay"; +}; + +/* + * Unfortunately reg_usb1_vbus also powers one of the ports from usb3's hub. + * One should always make sure both regulators are enabled and working for + * all USB ports to have power. + */Can't we just provide the two regulators, and enable both of them so that we know that we always have the needed regulators enabled, disregarding which USB port is used?
Quoted 5 lines
Quoted 2 lines
Would setting "always-on" for both regulators work for you? Or maybe just the one that's used by both USB hosts?
I was more thinking of giving to the phy an additional regulator, so that it would enable both the regulators needed to power up all ports.
That would require adding back all the regulator-related code I removed from the phy driver before it was merged. (sigh) It's not like the regulator bindings takes a list.
I see this as more of a hardware design flaw, and we should label it as such. And it might still work for self-powered devices even if VBUS is off. The USB hub chip is always on.
ChenYu
PATCH 1/2 ARM: dts: sun9i: cubieboard4: Enable USB support
Quoted 18 lines · Chen-Yu Tsai
Quoted 18 lines
Quoted 17 lines
Quoted 6 lines
Quoted 6 lines
+&usbphy1 {
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts +5
-0+ phy-supply = <®_usb1_vbus>; + status = "okay"; +}; + +/*Quoted 8 lines
Quoted 4 lines
+ * Unfortunately
reg_usb1_vbusalso powers one of the ports from usb3's hub.
+ * One should always make sure both regulators are enabled and working for
+ * all USB ports to have power.
+ */Can't we just provide the two regulators, and enable both of them so that we know that we always have the needed regulators enabled, disregarding which USB port is used?
Would setting "always-on" for both regulators work for you? Or maybe just the one that's used by both USB hosts?
Quoted 6 lines
Quoted 2 lines
I was more thinking of giving to the phy an additional regulator, so that it would enable both the regulators needed to power up all ports.
That would require adding back all the regulator-related code I removed from the phy driver before it was merged. (sigh) It's not like the regulator bindings takes a list.
Yeah, but maybe we can just add an optional device-supply property or something like that to power up the devices connected on the bus.
Quoted 2 lines
I see this as more of a hardware design flaw, and we should label it as such.
This can be seen as one, and we can debate it for some time I guess, but if the hardware guys were not making crazy stuff like that, we would run out of work pretty quickly :)
What we really need to do is find a proper and reliable way to handle this case. Whether we declare it as a flaw or not is a separate debate.
Quoted 2 lines
And it might still work for self-powered devices even if VBUS is off. The USB hub chip is always on.
That still leaves a significant amount of devices out and non functional, especially very standard devices like USB keys, keyboards or headsets that you would expect to just work.
Maxime
Signature · 10 lines
Maxime Ripard, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20150512/b950273a/attachment.sig>
PATCH 1/2 ARM: dts: sun9i: cubieboard4: Enable USB support
Quoted 22 lines · Maxime Ripard
Quoted 21 lines · Chen-Yu Tsai
Quoted 20 lines
Quoted 15 lines
Quoted 6 lines
Quoted 6 lines
+&usbphy1 {
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts +5
-0+ phy-supply = <®_usb1_vbus>; + status = "okay"; +}; + +/*Quoted 8 lines
Quoted 4 lines
+ * Unfortunately
reg_usb1_vbusalso powers one of the ports from usb3's hub.
+ * One should always make sure both regulators are enabled and working for
+ * all USB ports to have power.
+ */Can't we just provide the two regulators, and enable both of them so that we know that we always have the needed regulators enabled, disregarding which USB port is used?
Quoted 2 lines
Would setting "always-on" for both regulators work for you? Or maybe just the one that's used by both USB hosts?
I was more thinking of giving to the phy an additional regulator, so that it would enable both the regulators needed to power up all ports.
Quoted 6 lines
Quoted 3 lines
That would require adding back all the regulator-related code I removed from the phy driver before it was merged. (sigh) It's not like the regulator bindings takes a list.
Yeah, but maybe we can just add an optional device-supply property or something like that to power up the devices connected on the bus.
(CC-ed Kishon)
Do we think this generic enough to go into the generic phy core?
Quoted 6 lines
Quoted 2 lines
I see this as more of a hardware design flaw, and we should label it as such.
This can be seen as one, and we can debate it for some time I guess, but if the hardware guys were not making crazy stuff like that, we would run out of work pretty quickly :)
Ah yes, but the users would be happier. :)
Quoted 10 lines
What we really need to do is find a proper and reliable way to handle this case. Whether we declare it as a flaw or not is a separate debate.
Quoted 2 lines
And it might still work for self-powered devices even if VBUS is off. The USB hub chip is always on.
That still leaves a significant amount of devices out and non functional, especially very standard devices like USB keys, keyboards or headsets that you would expect to just work.
I agree. So the question is where should this go in.
ChenYu
PATCH 2/2 ARM: dts: sun9i: cubieboard4: Enable LEDs
In reply to Chen-Yu TsaiThe Cubieboard4 has 2 controllable LEDs, 1 red and 1 green.
--- arch/arm/boot/dts/sun9i-a80-cubieboard4.dts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts +23 -0
@@ -62,6 +62,22 @@ stdout-path = "serial0:115200n8"; }; + leds { + compatible = "gpio-leds"; + pinctrl-names = "default"; + pinctrl-0 = <&led_pins_cubieboard4>; + + green { + label = "cubieboard4:green:usr"; + gpios = <&pio 7 17 GPIO_ACTIVE_HIGH>; /* PH17 */ + }; + + red { + label = "cubieboard4:red:usr"; + gpios = <&pio 7 6 GPIO_ACTIVE_HIGH>; /* PH6 */ + }; + }; + reg_usb3_vbus: usb3-vbus { compatible = "regulator-fixed"; pinctrl-names = "default";
@@ -89,6 +105,13 @@ }; &pio { + led_pins_cubieboard4: led-pins at 0 { + allwinner,pins = "PH6", "PH17"; + allwinner,function = "gpio_out"; + allwinner,drive = <SUN4I_PINCTRL_10_MA>; + allwinner,pull = <SUN4I_PINCTRL_NO_PULL>; + }; + mmc0_cd_pin_cubieboard4: mmc0_cd_pin at 0 { allwinner,pins = "PH18"; allwinner,function = "gpio_in";
Signature · 1 line
2.1.4
cover ARM: sun9i: cubieboard4: Enable USB hosts and LEDs
In reply to Chen-Yu TsaiHi ChenYu,
Quoted 6 lines · Chen-Yu Tsai
Hi Maxime,
This small series enables USB host and LED support on the Cubieboard4. We already support these on the Optimus, so it's just dts stuff.
Quoted 7 lines
Regards
ChenYuChen-Yu Tsai (2):
ARM: dts: sun9i: cubieboard4: Enable USB support
ARM: dts: sun9i: cubieboard4: Enable LEDs
Thanks for posting these patches. I gave this series a spin on my cubieboard4 atop next-20150507 both with sunxi_defconfig and multi_v7_defconfig. Tested all four USB ports with various USB devices, and for good measure toggled the LED's :) Everything worked as expected, so feel free to add my
Quoted 7 lines
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts | 83 +++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+)--
2.1.4
Cheers,
Tyler