[RFC] ARM: dts: rockchip: Add wifi support for firefly
diff mbox

Message ID 5702275.SOOuh5NPWf@diego
State New
Headers show

Commit Message

Heiko Stübner Aug. 8, 2015, 9:05 p.m. UTC
Hi Michael,

Am Freitag, 7. August 2015, 16:12:05 schrieb Michael Trimarchi:
> This patch enable wifi support for the firefly board.
> Card answer to me that support from 2.0V but regulator is connected
> to 1.8V, so voltage capability is wrong. In order to avoid this
> we just defined a fixed regulator trigger by the wifi enable gpio
> that report 2.0V.
> 
> Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
> ---
>  arch/arm/boot/dts/rk3288-firefly.dtsi | 43
> +++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2
> deletions(-)
> 
> diff --git a/arch/arm/boot/dts/rk3288-firefly.dtsi
> b/arch/arm/boot/dts/rk3288-firefly.dtsi index 0b42372..fcf234e 100644
> --- a/arch/arm/boot/dts/rk3288-firefly.dtsi
> +++ b/arch/arm/boot/dts/rk3288-firefly.dtsi
> @@ -116,6 +116,28 @@
>  		vin-supply = <&vcc_io>;
>  	};
> 
> +	io_domains: io-domains {
> +		compatible = "rockchip,rk3288-io-voltage-domain";
> +		rockchip,grf = <&grf>;
> +
> +		wifi-supply = <&vcc_18>;
> +		audio-supply = <&vcca_33>;
> +	};

should be a separate patch and include the other interesting io-domains as 
well.

> +
> +	vcc_wifi: wifi-regulator {
> +		compatible = "regulator-fixed";
> +		enable-active-high;
> +		gpio = <&gpio4 28 GPIO_ACTIVE_HIGH>;
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&sdio0_pwr>;
> +		regulator-name = "vcc_wifi";
> +		regulator-min-microvolt = <2000000>;
> +		regulator-max-microvolt = <2000000>;
> +		startup-delay-us = <100000>;
> +		regulator-always-on;
> +		vin-supply = <&vcc_io>;
> +	};
> +
>  	vcc_flash: flash-regulator {
>  		compatible = "regulator-fixed";
>  		regulator-name = "vcc_flash";
> @@ -437,13 +459,30 @@
>  &sdio0 {
>  	broken-cd;
>  	bus-width = <4>;
> +	clock-freq-min-max = <400000 50000000>;
>  	disable-wp;
>  	non-removable;
> +	cap-sd-highspeed;
>  	num-slots = <1>;
>  	pinctrl-names = "default";
> -	pinctrl-0 = <&sdio0_bus4>, <&sdio0_cmd>, <&sdio0_clk>;
> -	vmmc-supply = <&vcc_18>;
> +	pinctrl-0 = <&sdio0_bus4>, <&sdio0_cmd>, <&sdio0_clk>, <&sdio0_int>;
> +
> +	sd-uhs-sdr50;
> +	sd-uhs-sdr104;
> +	sd-uhs-ddr50;

we don't have mmc tuning capabilities yet, so please no sd-uhs-* stuff. That 
way you should also be able to leave out the clock-freq-min-max above, as 
regular "highspeed" does not venture above the 50MHz limit.

> +	cap-sdio-irq;
> +
> +	vmmc-supply = <&vcc_wifi>;

the original supply is actually wrong in the dts. vcc_18 is the io voltage 
used on the 
pins _to_ the card, not to supply the card itself. So vcc_18 is actually the 
so called vqmmc-supply.
vmmc-supply is done regularly from vcc_io. So your voltage hack above can go 
away too.

Bringup should also use a mmc-power-sequency so you can make sure the 
rtc_clock is running, which is also needed by the wifi module.


>  	status = "okay";

missing #address-cells and #size-cells values for the subnodes

> +
> +	brcmf: bcrmf@0 {
> +		compatible = "brcm,bcm4329-fmac";
> +		interrupt-parent = <&gpio4>;
> +		reg = <0>;
> +		interrupts = <30 IRQ_TYPE_EDGE_FALLING>;
> +		interrupt-names = "host-wake";
> +		status = "okay";
> +	};
>  };
> 
>  &sdmmc {

I took the liberty to move stuff around how it should look like, but did not 
find the time to actually test this. So maybe you can take a look at the 
attached patches.


Heiko

Comments

Michael Nazzareno Trimarchi Aug. 9, 2015, 8:26 a.m. UTC | #1
Hi

On Sat, Aug 08, 2015 at 11:05:53PM +0200, Heiko Stübner wrote:
> Hi Michael,
> 
> Am Freitag, 7. August 2015, 16:12:05 schrieb Michael Trimarchi:
> > This patch enable wifi support for the firefly board.
> > Card answer to me that support from 2.0V but regulator is connected
> > to 1.8V, so voltage capability is wrong. In order to avoid this
> > we just defined a fixed regulator trigger by the wifi enable gpio
> > that report 2.0V.
> > 
> > Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
> > ---
> >  arch/arm/boot/dts/rk3288-firefly.dtsi | 43
> > +++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2
> > deletions(-)
> > 
> > diff --git a/arch/arm/boot/dts/rk3288-firefly.dtsi
> > b/arch/arm/boot/dts/rk3288-firefly.dtsi index 0b42372..fcf234e 100644
> > --- a/arch/arm/boot/dts/rk3288-firefly.dtsi
> > +++ b/arch/arm/boot/dts/rk3288-firefly.dtsi
> > @@ -116,6 +116,28 @@
> >  		vin-supply = <&vcc_io>;
> >  	};
> > 
> > +	io_domains: io-domains {
> > +		compatible = "rockchip,rk3288-io-voltage-domain";
> > +		rockchip,grf = <&grf>;
> > +
> > +		wifi-supply = <&vcc_18>;
> > +		audio-supply = <&vcca_33>;
> > +	};
> 
> should be a separate patch and include the other interesting io-domains as 
> well.
> 

Yes, fine

> > +
> > +	vcc_wifi: wifi-regulator {
> > +		compatible = "regulator-fixed";
> > +		enable-active-high;
> > +		gpio = <&gpio4 28 GPIO_ACTIVE_HIGH>;
> > +		pinctrl-names = "default";
> > +		pinctrl-0 = <&sdio0_pwr>;
> > +		regulator-name = "vcc_wifi";
> > +		regulator-min-microvolt = <2000000>;
> > +		regulator-max-microvolt = <2000000>;
> > +		startup-delay-us = <100000>;
> > +		regulator-always-on;
> > +		vin-supply = <&vcc_io>;
> > +	};
> > +
> >  	vcc_flash: flash-regulator {
> >  		compatible = "regulator-fixed";
> >  		regulator-name = "vcc_flash";
> > @@ -437,13 +459,30 @@
> >  &sdio0 {
> >  	broken-cd;
> >  	bus-width = <4>;
> > +	clock-freq-min-max = <400000 50000000>;
> >  	disable-wp;
> >  	non-removable;
> > +	cap-sd-highspeed;
> >  	num-slots = <1>;
> >  	pinctrl-names = "default";
> > -	pinctrl-0 = <&sdio0_bus4>, <&sdio0_cmd>, <&sdio0_clk>;
> > -	vmmc-supply = <&vcc_18>;
> > +	pinctrl-0 = <&sdio0_bus4>, <&sdio0_cmd>, <&sdio0_clk>, <&sdio0_int>;
> > +
> > +	sd-uhs-sdr50;
> > +	sd-uhs-sdr104;
> > +	sd-uhs-ddr50;
> 
> we don't have mmc tuning capabilities yet, so please no sd-uhs-* stuff. That 
> way you should also be able to leave out the clock-freq-min-max above, as 
> regular "highspeed" does not venture above the 50MHz limit.
> 

Ok, I have tested without it too and it works with a small hack on the code.
Agree with you

> > +	cap-sdio-irq;
> > +
> > +	vmmc-supply = <&vcc_wifi>;
> 
> the original supply is actually wrong in the dts. vcc_18 is the io voltage 
> used on the 
> pins _to_ the card, not to supply the card itself. So vcc_18 is actually the 
> so called vqmmc-supply.
> vmmc-supply is done regularly from vcc_io. So your voltage hack above can go 
> away too.
> 
> Bringup should also use a mmc-power-sequency so you can make sure the 
> rtc_clock is running, which is also needed by the wifi module.
> 

Hack is used to because when sdio subsystem compare the wifi voltage capability
returned by a specific message on the bus with the possible voltage levels that
hardware connection provides and take the minimal. The card return to support
from 2V up and this is the reason to declare it at 2V. I will retest again

> 
> >  	status = "okay";
> 
> missing #address-cells and #size-cells values for the subnodes
>

Correct

> > +
> > +	brcmf: bcrmf@0 {
> > +		compatible = "brcm,bcm4329-fmac";
> > +		interrupt-parent = <&gpio4>;
> > +		reg = <0>;
> > +		interrupts = <30 IRQ_TYPE_EDGE_FALLING>;
> > +		interrupt-names = "host-wake";
> > +		status = "okay";
> > +	};
> >  };
> > 
> >  &sdmmc {
> 
> I took the liberty to move stuff around how it should look like, but did not 
> find the time to actually test this. So maybe you can take a look at the 
> attached patches.
> 

Perfect, I will retest as soon as I can and go back to you. Right now
I have two hardware design around firefly that use the wifi

> 
> Heiko

Michael

> From 1a255ca2a4281b6257eca95ed3edabe74818bc1e Mon Sep 17 00:00:00 2001
> From: Heiko Stuebner <heiko@sntech.de>
> Date: Sat, 8 Aug 2015 22:14:57 +0200
> Subject: [PATCH 1/3] ARM: dts: rockchip: add rk3288-firefly io-domains
> 
> This adds the io-domain description for the different io supplies on
> the rk3288 firefly.
> 
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> ---
>  arch/arm/boot/dts/rk3288-firefly.dtsi | 21 ++++++++++++++++++++-
>  1 file changed, 20 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm/boot/dts/rk3288-firefly.dtsi b/arch/arm/boot/dts/rk3288-firefly.dtsi
> index 20fa0ef..0b2b496 100644
> --- a/arch/arm/boot/dts/rk3288-firefly.dtsi
> +++ b/arch/arm/boot/dts/rk3288-firefly.dtsi
> @@ -55,6 +55,20 @@
>  		clock-output-names = "ext_gmac";
>  	};
>  
> +	io_domains: io-domains {
> +		compatible = "rockchip,rk3288-io-voltage-domain";
> +		rockchip,grf = <&grf>;
> +
> +		audio-supply = <&vcca_33>;
> +		bb-supply = <&vcc_io>;
> +		flash0-supply = <&vcc_flash>;
> +		gpio1830-supply = <&vcc_io>;
> +		gpio30-supply = <&vcc_io>;
> +		lcdc-supply = <&vcc_io>;
> +		sdcard-supply = <&vccio_sd>;
> +		wifi-supply = <&vccio_wl>;
> +	};
> +
>  	ir: ir-receiver {
>  		compatible = "gpio-ir-receiver";
>  		pinctrl-names = "default";
> @@ -325,7 +339,12 @@
>  				regulator-always-on;
>  			};
>  
> -			vcc_18: REG11 {
> +			/*
> +			 * vcc_18 has an alias named vccio_wl.  We'll add this
> +			 * aliase here just to make it easier to follow the
> +			 * schematic.
> +			 */
> +			vccio_wl: vcc_18: REG11 {
>  				regulator-name = "vcc_18";
>  				regulator-min-microvolt = <1800000>;
>  				regulator-max-microvolt = <1800000>;
> -- 
> 2.1.4
> 

> From e89204f15a1c1c9066013e2517bc5bb80d067601 Mon Sep 17 00:00:00 2001
> From: Heiko Stuebner <heiko@sntech.de>
> Date: Sat, 8 Aug 2015 22:37:52 +0200
> Subject: [PATCH 2/3] ARM: dts: rockchip: add #address- and #size-cells to
>  dw-mshc nodes
> 
> The mmc subsystem allows to specifiy function subnodes to specify data
> for embedded boards like wifi sdio modules use there.
> The address of these submodules is the slot-id they are connected to,
> so set #address-cells and #size-cells accordingly to prevent boards from
> having to repeat these settings in each dts.
> 
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> ---
>  arch/arm/boot/dts/rk3288.dtsi | 8 ++++++++
>  arch/arm/boot/dts/rk3xxx.dtsi | 6 ++++++
>  2 files changed, 14 insertions(+)
> 
> diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
> index 906e938..7bd0a30 100644
> --- a/arch/arm/boot/dts/rk3288.dtsi
> +++ b/arch/arm/boot/dts/rk3288.dtsi
> @@ -227,6 +227,8 @@
>  		fifo-depth = <0x100>;
>  		interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
>  		reg = <0xff0c0000 0x4000>;
> +		#address-cells = <1>;
> +		#size-cells = <0>;
>  		status = "disabled";
>  	};
>  
> @@ -238,6 +240,8 @@
>  		fifo-depth = <0x100>;
>  		interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
>  		reg = <0xff0d0000 0x4000>;
> +		#address-cells = <1>;
> +		#size-cells = <0>;
>  		status = "disabled";
>  	};
>  
> @@ -249,6 +253,8 @@
>  		fifo-depth = <0x100>;
>  		interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
>  		reg = <0xff0e0000 0x4000>;
> +		#address-cells = <1>;
> +		#size-cells = <0>;
>  		status = "disabled";
>  	};
>  
> @@ -260,6 +266,8 @@
>  		fifo-depth = <0x100>;
>  		interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
>  		reg = <0xff0f0000 0x4000>;
> +		#address-cells = <1>;
> +		#size-cells = <0>;
>  		status = "disabled";
>  	};
>  
> diff --git a/arch/arm/boot/dts/rk3xxx.dtsi b/arch/arm/boot/dts/rk3xxx.dtsi
> index 4497d28..e09b752 100644
> --- a/arch/arm/boot/dts/rk3xxx.dtsi
> +++ b/arch/arm/boot/dts/rk3xxx.dtsi
> @@ -218,6 +218,8 @@
>  		clocks = <&cru HCLK_SDMMC>, <&cru SCLK_SDMMC>;
>  		clock-names = "biu", "ciu";
>  		fifo-depth = <256>;
> +		#address-cells = <1>;
> +		#size-cells = <0>;
>  		status = "disabled";
>  	};
>  
> @@ -228,6 +230,8 @@
>  		clocks = <&cru HCLK_SDIO>, <&cru SCLK_SDIO>;
>  		clock-names = "biu", "ciu";
>  		fifo-depth = <256>;
> +		#address-cells = <1>;
> +		#size-cells = <0>;
>  		status = "disabled";
>  	};
>  
> @@ -238,6 +242,8 @@
>  		clocks = <&cru HCLK_EMMC>, <&cru SCLK_EMMC>;
>  		clock-names = "biu", "ciu";
>  		fifo-depth = <256>;
> +		#address-cells = <1>;
> +		#size-cells = <0>;
>  		status = "disabled";
>  	};
>  
> -- 
> 2.1.4
> 

> From 62bd4e7d8e78296089a675575df4354e605723c9 Mon Sep 17 00:00:00 2001
> From: Michael Trimarchi <michael@amarulasolutions.com>
> Date: Fri, 7 Aug 2015 16:12:05 +0200
> Subject: [PATCH 3/3] ARM: dts: rockchip: Add wifi support for firefly
> 
> This patch enables wifi support for the firefly board.
> 
> The core supply of the wifi modules comes from vcc_io but aliased to
> vbat_wl, so add this alias too to make reading the schematics easier.
> 
> Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
> ---
>  arch/arm/boot/dts/rk3288-firefly.dtsi | 38 ++++++++++++++++++++++++++++++++---
>  1 file changed, 35 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/arm/boot/dts/rk3288-firefly.dtsi b/arch/arm/boot/dts/rk3288-firefly.dtsi
> index 0b2b496..506bd00 100644
> --- a/arch/arm/boot/dts/rk3288-firefly.dtsi
> +++ b/arch/arm/boot/dts/rk3288-firefly.dtsi
> @@ -110,6 +110,17 @@
>  		};
>  	};
>  
> +	sdio_pwrseq: sdio-pwrseq {
> +		compatible = "mmc-pwrseq-simple";
> +		clocks = <&hym8563>;
> +		clock-names = "ext_clock";
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&wifi_reg_on>;
> +
> +		/* On the module itself this is WL_REG_ON */
> +		reset-gpios = <&gpio4 28 GPIO_ACTIVE_LOW>;
> +	};
> +
>  	vcc_sys: vsys-regulator {
>  		compatible = "regulator-fixed";
>  		regulator-name = "vcc_sys";
> @@ -428,6 +439,12 @@
>  		};
>  	};
>  
> +	sdio {
> +		wifi_reg_on: wifi-reg-on {
> +			rockchip,pins = <4 28 RK_FUNC_GPIO &pcfg_pull_none>;
> +		};
> +	};
> +
>  	sdmmc {
>  		sdmmc_pwr: sdmmc-pwr {
>  			rockchip,pins = <7 11 RK_FUNC_GPIO &pcfg_pull_none>;
> @@ -457,15 +474,30 @@
>  };
>  
>  &sdio0 {
> +	status = "okay";
> +
>  	broken-cd;
>  	bus-width = <4>;
>  	disable-wp;
> +	cap-sd-highspeed;
> +	cap-sdio-irq;
> +	keep-power-in-suspend;
> +	mmc-pwrseq = <&sdio_pwrseq>;
>  	non-removable;
>  	num-slots = <1>;
>  	pinctrl-names = "default";
> -	pinctrl-0 = <&sdio0_bus4>, <&sdio0_cmd>, <&sdio0_clk>;
> -	vmmc-supply = <&vcc_18>;
> -	status = "okay";
> +	pinctrl-0 = <&sdio0_bus4>, <&sdio0_cmd>, <&sdio0_clk>, <&sdio0_int>;
> +	vmmc-supply = <&vcc_io>;
> +	vqmmc-supply = <&vccio_wl>;
> +
> +	brcmf: bcrmf@0 {
> +		compatible = "brcm,bcm4329-fmac";
> +		reg = <0>;
> +		interrupt-parent = <&gpio4>;
> +		interrupts = <30 IRQ_TYPE_EDGE_FALLING>;
> +		interrupt-names = "host-wake";
> +		status = "okay";
> +	};
>  };
>  
>  &sdmmc {
> -- 
> 2.1.4
>
Heiko Stübner Aug. 9, 2015, 7:17 p.m. UTC | #2
Hi Michael,

Am Sonntag, 9. August 2015, 10:26:44 schrieb Michael Trimarchi:

[...]

> > >  	num-slots = <1>;
> > >  	pinctrl-names = "default";
> > > 
> > > -	pinctrl-0 = <&sdio0_bus4>, <&sdio0_cmd>, <&sdio0_clk>;
> > > -	vmmc-supply = <&vcc_18>;
> > > +	pinctrl-0 = <&sdio0_bus4>, <&sdio0_cmd>, <&sdio0_clk>, <&sdio0_int>;
> > > +
> > > +	sd-uhs-sdr50;
> > > +	sd-uhs-sdr104;
> > > +	sd-uhs-ddr50;
> > 
> > we don't have mmc tuning capabilities yet, so please no sd-uhs-* stuff.
> > That way you should also be able to leave out the clock-freq-min-max
> > above, as regular "highspeed" does not venture above the 50MHz limit.
> 
> Ok, I have tested without it too and it works with a small hack on the code.
> Agree with you

what was this supposed to fix? And what "hack" do you use now?


> > > +	cap-sdio-irq;
> > > +
> > > +	vmmc-supply = <&vcc_wifi>;
> > 
> > the original supply is actually wrong in the dts. vcc_18 is the io voltage
> > used on the
> > pins _to_ the card, not to supply the card itself. So vcc_18 is actually
> > the so called vqmmc-supply.
> > vmmc-supply is done regularly from vcc_io. So your voltage hack above can
> > go away too.
> > 
> > Bringup should also use a mmc-power-sequency so you can make sure the
> > rtc_clock is running, which is also needed by the wifi module.
> 
> Hack is used to because when sdio subsystem compare the wifi voltage
> capability returned by a specific message on the bus with the possible
> voltage levels that hardware connection provides and take the minimal. The
> card return to support from 2V up and this is the reason to declare it at
> 2V. I will retest again

after the supplies are corrected (see vmmc and vqmmc in the patches) the 
supply for the modules should actually be read as the 3.3V that are supplying 
it (from vcc_io ... which is called vbat_wl in the schematics).


> > >  	status = "okay";
> > 
> > missing #address-cells and #size-cells values for the subnodes
> 
> Correct
> 
> > > +
> > > +	brcmf: bcrmf@0 {
> > > +		compatible = "brcm,bcm4329-fmac";
> > > +		interrupt-parent = <&gpio4>;
> > > +		reg = <0>;
> > > +		interrupts = <30 IRQ_TYPE_EDGE_FALLING>;
> > > +		interrupt-names = "host-wake";
> > > +		status = "okay";
> > > +	};
> > > 
> > >  };
> > >  
> > >  &sdmmc {
> > 
> > I took the liberty to move stuff around how it should look like, but did
> > not find the time to actually test this. So maybe you can take a look at
> > the attached patches.
> 
> Perfect, I will retest as soon as I can and go back to you. Right now
> I have two hardware design around firefly that use the wifi

great


Heiko
Michael Nazzareno Trimarchi Nov. 16, 2015, 7:39 a.m. UTC | #3
Hi Heiko

Sorry for long delay, the product was moved from rk3288 to imx6

I will rebase everything and use your patches soon and test

Michael

On Sun, Aug 9, 2015 at 9:17 PM, Heiko Stübner <heiko@sntech.de> wrote:
> Hi Michael,
>
> Am Sonntag, 9. August 2015, 10:26:44 schrieb Michael Trimarchi:
>
> [...]
>
>> > >   num-slots = <1>;
>> > >   pinctrl-names = "default";
>> > >
>> > > - pinctrl-0 = <&sdio0_bus4>, <&sdio0_cmd>, <&sdio0_clk>;
>> > > - vmmc-supply = <&vcc_18>;
>> > > + pinctrl-0 = <&sdio0_bus4>, <&sdio0_cmd>, <&sdio0_clk>, <&sdio0_int>;
>> > > +
>> > > + sd-uhs-sdr50;
>> > > + sd-uhs-sdr104;
>> > > + sd-uhs-ddr50;
>> >
>> > we don't have mmc tuning capabilities yet, so please no sd-uhs-* stuff.
>> > That way you should also be able to leave out the clock-freq-min-max
>> > above, as regular "highspeed" does not venture above the 50MHz limit.
>>
>> Ok, I have tested without it too and it works with a small hack on the code.
>> Agree with you
>
> what was this supposed to fix? And what "hack" do you use now?
>
>
>> > > + cap-sdio-irq;
>> > > +
>> > > + vmmc-supply = <&vcc_wifi>;
>> >
>> > the original supply is actually wrong in the dts. vcc_18 is the io voltage
>> > used on the
>> > pins _to_ the card, not to supply the card itself. So vcc_18 is actually
>> > the so called vqmmc-supply.
>> > vmmc-supply is done regularly from vcc_io. So your voltage hack above can
>> > go away too.
>> >
>> > Bringup should also use a mmc-power-sequency so you can make sure the
>> > rtc_clock is running, which is also needed by the wifi module.
>>
>> Hack is used to because when sdio subsystem compare the wifi voltage
>> capability returned by a specific message on the bus with the possible
>> voltage levels that hardware connection provides and take the minimal. The
>> card return to support from 2V up and this is the reason to declare it at
>> 2V. I will retest again
>
> after the supplies are corrected (see vmmc and vqmmc in the patches) the
> supply for the modules should actually be read as the 3.3V that are supplying
> it (from vcc_io ... which is called vbat_wl in the schematics).
>
>
>> > >   status = "okay";
>> >
>> > missing #address-cells and #size-cells values for the subnodes
>>
>> Correct
>>
>> > > +
>> > > + brcmf: bcrmf@0 {
>> > > +         compatible = "brcm,bcm4329-fmac";
>> > > +         interrupt-parent = <&gpio4>;
>> > > +         reg = <0>;
>> > > +         interrupts = <30 IRQ_TYPE_EDGE_FALLING>;
>> > > +         interrupt-names = "host-wake";
>> > > +         status = "okay";
>> > > + };
>> > >
>> > >  };
>> > >
>> > >  &sdmmc {
>> >
>> > I took the liberty to move stuff around how it should look like, but did
>> > not find the time to actually test this. So maybe you can take a look at
>> > the attached patches.
>>
>> Perfect, I will retest as soon as I can and go back to you. Right now
>> I have two hardware design around firefly that use the wifi
>
> great
>
>
> Heiko
Michael Nazzareno Trimarchi Dec. 31, 2015, 12:29 p.m. UTC | #4
Hi Heiko

On Sat, Aug 8, 2015 at 11:05 PM, Heiko Stübner <heiko@sntech.de> wrote:
> Hi Michael,
>
> Am Freitag, 7. August 2015, 16:12:05 schrieb Michael Trimarchi:
>> This patch enable wifi support for the firefly board.
>> Card answer to me that support from 2.0V but regulator is connected
>> to 1.8V, so voltage capability is wrong. In order to avoid this
>> we just defined a fixed regulator trigger by the wifi enable gpio
>> that report 2.0V.
>>
>> Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
>> ---
>>  arch/arm/boot/dts/rk3288-firefly.dtsi | 43
>> +++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2
>> deletions(-)
>>
>> diff --git a/arch/arm/boot/dts/rk3288-firefly.dtsi
>> b/arch/arm/boot/dts/rk3288-firefly.dtsi index 0b42372..fcf234e 100644
>> --- a/arch/arm/boot/dts/rk3288-firefly.dtsi
>> +++ b/arch/arm/boot/dts/rk3288-firefly.dtsi
>> @@ -116,6 +116,28 @@
>>               vin-supply = <&vcc_io>;
>>       };
>>
>> +     io_domains: io-domains {
>> +             compatible = "rockchip,rk3288-io-voltage-domain";
>> +             rockchip,grf = <&grf>;
>> +
>> +             wifi-supply = <&vcc_18>;
>> +             audio-supply = <&vcca_33>;
>> +     };
>
> should be a separate patch and include the other interesting io-domains as
> well.
>

This is alredy in mainline

>> +
>> +     vcc_wifi: wifi-regulator {
>> +             compatible = "regulator-fixed";
>> +             enable-active-high;
>> +             gpio = <&gpio4 28 GPIO_ACTIVE_HIGH>;
>> +             pinctrl-names = "default";
>> +             pinctrl-0 = <&sdio0_pwr>;
>> +             regulator-name = "vcc_wifi";
>> +             regulator-min-microvolt = <2000000>;
>> +             regulator-max-microvolt = <2000000>;
>> +             startup-delay-us = <100000>;
>> +             regulator-always-on;
>> +             vin-supply = <&vcc_io>;
>> +     };
>> +
>>       vcc_flash: flash-regulator {
>>               compatible = "regulator-fixed";
>>               regulator-name = "vcc_flash";
>> @@ -437,13 +459,30 @@
>>  &sdio0 {
>>       broken-cd;
>>       bus-width = <4>;
>> +     clock-freq-min-max = <400000 50000000>;
>>       disable-wp;
>>       non-removable;
>> +     cap-sd-highspeed;
>>       num-slots = <1>;
>>       pinctrl-names = "default";
>> -     pinctrl-0 = <&sdio0_bus4>, <&sdio0_cmd>, <&sdio0_clk>;
>> -     vmmc-supply = <&vcc_18>;
>> +     pinctrl-0 = <&sdio0_bus4>, <&sdio0_cmd>, <&sdio0_clk>, <&sdio0_int>;
>> +
>> +     sd-uhs-sdr50;
>> +     sd-uhs-sdr104;
>> +     sd-uhs-ddr50;
>
> we don't have mmc tuning capabilities yet, so please no sd-uhs-* stuff. That
> way you should also be able to leave out the clock-freq-min-max above, as
> regular "highspeed" does not venture above the 50MHz limit.
>
>> +     cap-sdio-irq;
>> +
>> +     vmmc-supply = <&vcc_wifi>;
>
> the original supply is actually wrong in the dts. vcc_18 is the io voltage
> used on the
> pins _to_ the card, not to supply the card itself. So vcc_18 is actually the
> so called vqmmc-supply.
> vmmc-supply is done regularly from vcc_io. So your voltage hack above can go
> away too.
>
> Bringup should also use a mmc-power-sequency so you can make sure the
> rtc_clock is running, which is also needed by the wifi module.
>
>
>>       status = "okay";
>
> missing #address-cells and #size-cells values for the subnodes
>

I can confirm that patch 2 fix the issue of subnodes.
I will try to complete here the support

Michael

>> +
>> +     brcmf: bcrmf@0 {
>> +             compatible = "brcm,bcm4329-fmac";
>> +             interrupt-parent = <&gpio4>;
>> +             reg = <0>;
>> +             interrupts = <30 IRQ_TYPE_EDGE_FALLING>;
>> +             interrupt-names = "host-wake";
>> +             status = "okay";
>> +     };
>>  };
>>
>>  &sdmmc {
>
> I took the liberty to move stuff around how it should look like, but did not
> find the time to actually test this. So maybe you can take a look at the
> attached patches.
>
>
> Heiko

Patch
diff mbox

From 62bd4e7d8e78296089a675575df4354e605723c9 Mon Sep 17 00:00:00 2001
From: Michael Trimarchi <michael@amarulasolutions.com>
Date: Fri, 7 Aug 2015 16:12:05 +0200
Subject: [PATCH 3/3] ARM: dts: rockchip: Add wifi support for firefly

This patch enables wifi support for the firefly board.

The core supply of the wifi modules comes from vcc_io but aliased to
vbat_wl, so add this alias too to make reading the schematics easier.

Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
---
 arch/arm/boot/dts/rk3288-firefly.dtsi | 38 ++++++++++++++++++++++++++++++++---
 1 file changed, 35 insertions(+), 3 deletions(-)

diff --git a/arch/arm/boot/dts/rk3288-firefly.dtsi b/arch/arm/boot/dts/rk3288-firefly.dtsi
index 0b2b496..506bd00 100644
--- a/arch/arm/boot/dts/rk3288-firefly.dtsi
+++ b/arch/arm/boot/dts/rk3288-firefly.dtsi
@@ -110,6 +110,17 @@ 
 		};
 	};
 
+	sdio_pwrseq: sdio-pwrseq {
+		compatible = "mmc-pwrseq-simple";
+		clocks = <&hym8563>;
+		clock-names = "ext_clock";
+		pinctrl-names = "default";
+		pinctrl-0 = <&wifi_reg_on>;
+
+		/* On the module itself this is WL_REG_ON */
+		reset-gpios = <&gpio4 28 GPIO_ACTIVE_LOW>;
+	};
+
 	vcc_sys: vsys-regulator {
 		compatible = "regulator-fixed";
 		regulator-name = "vcc_sys";
@@ -428,6 +439,12 @@ 
 		};
 	};
 
+	sdio {
+		wifi_reg_on: wifi-reg-on {
+			rockchip,pins = <4 28 RK_FUNC_GPIO &pcfg_pull_none>;
+		};
+	};
+
 	sdmmc {
 		sdmmc_pwr: sdmmc-pwr {
 			rockchip,pins = <7 11 RK_FUNC_GPIO &pcfg_pull_none>;
@@ -457,15 +474,30 @@ 
 };
 
 &sdio0 {
+	status = "okay";
+
 	broken-cd;
 	bus-width = <4>;
 	disable-wp;
+	cap-sd-highspeed;
+	cap-sdio-irq;
+	keep-power-in-suspend;
+	mmc-pwrseq = <&sdio_pwrseq>;
 	non-removable;
 	num-slots = <1>;
 	pinctrl-names = "default";
-	pinctrl-0 = <&sdio0_bus4>, <&sdio0_cmd>, <&sdio0_clk>;
-	vmmc-supply = <&vcc_18>;
-	status = "okay";
+	pinctrl-0 = <&sdio0_bus4>, <&sdio0_cmd>, <&sdio0_clk>, <&sdio0_int>;
+	vmmc-supply = <&vcc_io>;
+	vqmmc-supply = <&vccio_wl>;
+
+	brcmf: bcrmf@0 {
+		compatible = "brcm,bcm4329-fmac";
+		reg = <0>;
+		interrupt-parent = <&gpio4>;
+		interrupts = <30 IRQ_TYPE_EDGE_FALLING>;
+		interrupt-names = "host-wake";
+		status = "okay";
+	};
 };
 
 &sdmmc {
-- 
2.1.4