Letux Kernel

Issue 585: 3.14: WLAN does not work reliably

Reported by Nikolaus Schaller, Apr 10, 2014

well, it works - at least the interface comes up and power is 
controlled.
But it appears to keep the WiFi chip/power enabled after boot which 
increases the power drain beyond 500mA (draining the battery even if 
connected to USB)
We did have a similar issue in 3.12 and submitted a patch. This 
might have been lost.

Comment 1 by Nikolaus Schaller, May 4, 2014

Compare/see

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commi
t/?id=94647a30124e2c7243ffcd780862ed591ae36450

since the Overo uses the same Wi2Wi module as we do. Only hardware 
wiring (power, reset etc.) might be slightly different.

Comment 2 by Nikolaus Schaller, May 24, 2014

I have looked into this and they use a new feature of the MMC driver 
- which can now separately control VDDQ and VDD-AUX.
Those are used to control the WiFi reset through a GPIO:

	/* Regulator to trigger the nReset signal of the Wifi module */
	w3cbw003c_wifi_nreset: regulator-w3cbw003c-wifi-nreset {
		pinctrl-names = "default";
		pinctrl-0 = <&w3cbw003c_pins &w3cbw003c_2_pins>;
		compatible = "regulator-fixed";
		regulator-name = "regulator-w3cbw003c-wifi-nreset";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		gpio = <&gpio1 16 GPIO_ACTIVE_HIGH>;		/* gpio_16: WiFi 
nReset */
		startup-delay-us = <10000>;
	};

&mmc2 {
	pinctrl-names = "default";
	pinctrl-0 = <&mmc2_pins>;
	vmmc-supply = <&w3cbw003c_npoweron>;
	vqmmc-supply = <&w3cbw003c_bt_nreset>;
	vmmc_aux-supply = <&w3cbw003c_wifi_nreset>;
	bus-width = <4>;
	cap-sdio-irq;
	non-removable;
};

We could easily achieve the same by providing the TCA6507 GPIO for 
the 
"w3cbw003c_npoweron".

Then, we will no longer need the "reset-gpios" properties 
and patch for drivers/mmc/host/omap_hsmmc.c

Another bonus is that we can specify a startup-delay (if we want to).

Comment 3 by Nikolaus Schaller, May 24, 2014

After thinking a little, this might not correctly work. The reason 
is that this requires a separate reset for WLAN and Bluetooth. On 
the Overo it is available.
On our board, this would mean that disabling the interface will 
activate reset for both, effectively stopping Bluetooth as well.
So they can't be operated independently.
Using the reset mechanism we currently have, means that there will 
be a short reset impulse - and only if needed by the MMC driver.

What we could learn is to use cap-sdio-irq. This might speed up WiFi 
processing.

Comment 4 by Nikolaus Schaller, Dec 17, 2016

All what is described here as problems seems to be working at least 
in 4.9.0. So we can close this topic.
Status: Fixed

Created: 5 years 10 months ago by Nikolaus Schaller

Updated: 3 years 2 months ago

Status: Fixed

Labels:
Type:Defect
Priority:Critical
Milestone:3.15