This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

How to initialize MMC2 interface for AM335x based board in kernel 3.12

Other Parts Discussed in Thread: WL1801, WL1801MOD

Hi,

I am using TI SDK version 7 and been to able initialize the MMC2 interface in uboot successfully by using the following link:

e2e.ti.com/.../1242196

U-boot log:

U-Boot SPL 2013.10-00189-g78d8ebd-dirty (Mar 10 2015 - 16:03:10)
Enabling NAND pin mux Successful

DRA 618 MPU freq set to 720Mhz
DRA 618 Core freq set to 720Mhz
reading args
spl: error reading image args, err - -1
reading u-boot.img
reading u-boot.img


U-Boot 2013.10-00189-g78d8ebd-dirty (Mar 10 2015 - 16:03:10)

I2C:   ready
DRAM:  256 MiB
NAND:  1024 MiB


MMC:   
OMAP_HSMMC3_BASE case
@@@@ MMC2 init Success
OMAP SD/MMC: 0, OMAP SD/MMC: 1, OMAP SD/MMC: 2
Net:   Net Initialization Skipped
No ethernet found.
Hit any key to stop autoboot:  0

But the MMC2 interface is not getting initialized in Kernel. I have attached the kernel log for the same.

I need this as the WL1801 connected on MMC2 is not getting detected.
We need to get this working for Wi-Fi to work.

Here are the device tree details:

        /* wl12xx/wl18xx card on mmc2 */
        mmc3_pins: pinmux_mmc3_pins {
            pinctrl-single,pins = <
                0x44 (PIN_INPUT_PULLUP | MUX_MODE3)    /* gpmc_a1.mmc2_dat0, INPUT_PULLUP | MODE3 */
                0x48 (PIN_INPUT_PULLUP | MUX_MODE3)    /* gpmc_a2.mmc2_dat1, INPUT_PULLUP | MODE3 */
                0x4C (PIN_INPUT_PULLUP | MUX_MODE3)    /* gpmc_a3.mmc2_dat2, INPUT_PULLUP | MODE3 */
                0x78 (PIN_INPUT_PULLUP | MUX_MODE3)    /* gpmc_ben1.mmc2_dat3, INPUT_PULLUP | MODE3 */
                0x88 (PIN_INPUT_PULLUP | MUX_MODE3)    /* gpmc_csn3.mmc2_cmd, INPUT_PULLUP | MODE3 */
                0x8C (PIN_INPUT_PULLUP | MUX_MODE3)    /* gpmc_clk.mmc2_clk, INPUT_PULLUP | MODE3 */
            >;
        };

        /* wl12xx/wl18xx card enable/irq GPIOs. */
        wlan_pins: pinmux_wlan_pins {
            pinctrl-single,pins = <
                0x110 (PIN_OUTPUT_PULLUP | MUX_MODE7) /* MII1_RX_ER.gpio3_2 used for wi-fi en */
                0xE4 0x27    /* LCD_HSYNC.gpio2_23, INPUT | MODE7 wi fi irq*/                
            >;
        };

&mmc3 {
    /* these are on the crossbar and are outlined in the
    xbar-event-map element */
    dmas = <&edma 12
    &edma 13>;
    dma-names = "tx", "rx";
    status = "okay";
    vmmc-supply = <&wlan_en_reg>;
    bus-width = <4>;
    pinctrl-names = "default";
    pinctrl-0 = <&mmc3_pins &wlan_pins>;
    ti,non-removable;
    ti,needs-special-hs-handling;
    cap-power-off-card;
    keep-power-in-suspend;

    #address-cells = <1>;
    #size-cells = <0>;
    wlcore: wlcore@0 {
    compatible = "ti,wlcore";
    reg = <2>;
    interrupt-parent = <&gpio2>;
    interrupts = <23 IRQ_TYPE_NONE>;
    };
};

&edma {
    ti,edma-xbar-event-map = /bits/ 16 <1 12
    2 13>;
};

    wlcore {
        compatible = "wlcore";
        gpio = <87>; /* Bank2, pin23 GPIO for Wi-Fi_IRQ */

        /*
         * TODO: use edge irqs for suspend/resume.
         * in newer kerenls, we seem to miss interrupts when
         * working with edge irqs, so revert back to level irqs.
         */
         /* platform-quirks = <1>; */

        /* if a 12xx card is there, configure the clock to
           WL12XX_REFCLOCK_38_XTAL */
        board-ref-clock = <4>;
    };    

    wlan_en_reg: fixedregulator@2 {
        compatible = "regulator-fixed";
        regulator-name = "wlan-en-regulator";
         regulator-min-microvolt = <1800000>;
         regulator-max-microvolt = <1800000>;

    /* WLAN_EN GPIO for this board - Bank3, pin2 */
        gpio = <&gpio3 2 0>;

    /* WLAN card specific delay */
        startup-delay-us = <70000>;
        enable-active-high;
    };