[PATCH 1/2] ARM: dts: sun9i: cubieboard4: Enable USB support

Chen-Yu Tsai wens at csie.org
Fri May 8 01:01:14 PDT 2015


On Fri, May 8, 2015 at 3:46 PM, Maxime Ripard
<maxime.ripard at free-electrons.com> wrote:
> Hi,
>
> On Fri, May 08, 2015 at 12:43:56AM +0800, Chen-Yu Tsai wrote:
>> 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 <wens at csie.org>
>> ---
>>  arch/arm/boot/dts/sun9i-a80-cubieboard4.dts | 60 +++++++++++++++++++++++++++++
>>  1 file changed, 60 insertions(+)
>>
>> diff --git a/arch/arm/boot/dts/sun9i-a80-cubieboard4.dts b/arch/arm/boot/dts/sun9i-a80-cubieboard4.dts
>> index 6484dcf69873..42ddc046213c 100644
>> --- a/arch/arm/boot/dts/sun9i-a80-cubieboard4.dts
>> +++ b/arch/arm/boot/dts/sun9i-a80-cubieboard4.dts
>> @@ -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 */
>
> 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.

>> +
>> +&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";
>>  };
>>
>> +&reg_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 = <&reg_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?

Would setting "always-on" for both regulators work for you?
Or maybe just the one that's used by both USB hosts?

ChenYu



More information about the linux-arm-kernel mailing list