AnsweredAssumed Answered

Using wl18xx module with iMX6q--getting "wlcore: ERROR request_irq() failed: -22"

Question asked by Alok Pawar on Jul 16, 2014

Hi All,

I am working on iMX6q processor and using yocto 1.6.1 with kernel 3.10.17(device tree based), with the wl18xx(1835) wifi module. So for wifi initialization i did changes in imx6qdl-sabresd.dtsi which is included in imx6q-sabresd.dts file.

 

Pin configuration are:-

4 data pin connected to SD2

wlan_en is always high

wlan_irq is on gpio2_IO07.. (irq number-100)

 

Below are the changes done by me:

for regulator:-

reg_3p3v: 3p3v {

            compatible = "regulator-fixed";

            regulator-name = "3p3v";

            regulator-min-microvolt = <3300000>;

            regulator-max-microvolt = <3300000>;

            regulator-always-on;

        };

        wilink_wl_en: tiwi_wlan {

            compatible = "regulator-fixed";

            regulator-name = "tiwi_wlan";

            regulator-min-microvolt = <1800000>;

            regulator-max-microvolt = <1800000>;

            startup-delay-us = <70000>;

            enable-active-high;

 

for irq:-

wlan {

        /* bogus */

        pinctrl-names = "default";

        /* ? */

        interrupt-parent = <&gpio2>;

        interrupts = <07 0x01>;

        interrupt-controller;

        #interrupt-cells = <2>;

        #reg = <0x20>;

        /* generic */

        compatible = "wlcore";

        status = "okay";

        /* actual used?! */

        irq = <100>;

        #board-tcxo-clock = <5>;

        board-ref-clock = <4>; /* BOARD reference clock, See /include/linux/wl12xx.h for more info*/

        platform-quirks = <1>;

    };

 

for platform data:-

&usdhc2 {

        pinctrl-names = "default";

        pinctrl-0 = <&pinctrl_usdhc2_1>;

        bus-width = <4>;

            non-removable;

            vmmc-supply = <&reg_3p3v>;

            vqmmc-supply = <&wilink_wl_en>;

            ocr-limit = <0x80>;

           #power-off-card;

        #no-1-8-v;

        #keep-power-in-suspend;

        enable-sdio-wakeup;

        status = "okay";

};

Note:- board dts are attached with this post.

 

After these changes i am getting initialized SDIO card on mmc0 and able to load the wifi module, but getting the error,  request irq error, when inserting last module(wl18xx.ko) with the prints which i put in driver(wlcore/main.c).

 

root@imx6qsabresd:/ko_mod# insmod wlcore.ko

root@imx6qsabresd:/ko_mod# insmod wlcore_sdio.ko

mmc0: Switching to 3.3V signalling voltage  failed

root@imx6qsabresd:/ko_mod#

root@imx6qsabresd:/ko_mod# insmod wl18xx.ko

root@imx6qsabresd:/ko_mod# wlcore: wl18xx driver version: ol_r8.a8.04_32

     wlcore_nvs_cb: wl->irq: 100, wl->platform_quirks=1          (user print)

     wlcore_nvs_cb: irqflags: 1, wl->platform_quirks=1, wl12xx_macro=1     (user print)

     wlcore_nvs_cb: pdev->name=wl18xx     (user print)

wlcore: ERROR request_irq() failed: -22

 

I probed the slow_clk, sdio_clk, enable pins, all are coming fine, but not getting wlan_irq.

 

I am stuck here and confused about the values which i am using in dts are correct or not, mainly my queries are--

 

1.) what should be the reg value in wlan_irq function in dtsi file. It is required and from where i get the correct value of it. what are the significance of it?

2.) why this request_irq error are coming. There are need some more changes in dtsi file?

3.) Value of platform_quirk should be 1 or something else?

4.)Why i am getting "mmc0: Switching to 3.3V signalling voltage  failed" log ?

5.)I required board tcxo clock with board ref clock in wl18xx module?

 

Please help me and give the solution of my query, if i am missing something else other than this, please tell that too.

 

Thanks

ALKS

Original Attachment has been moved to: imx6qdl-sabresd.dtsi.zip

Outcomes