Re: MMC3 Overo

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jul 30, 2009 at 11:49 AM, John Sarman<johnsarman@xxxxxxxxx> wrote:
> I am trying to use mmc3 on the Overo Gumstix board with no luck.  I
> have patched the kernel with the latest changes and have yet to see a
> clk pulse, both before and after the patches.
After adding some debugging printks, I have determined the mmc3 fails
getting IRQ
mmci-omap-hs mmci-omap-hs.0: Failed to get debounce clock
REQUEST IRQ = 83 HOST = -812068416
mmci-omap-hs mmci-omap-hs.1: Failed to get debounce clock
REQUEST IRQ = 86 HOST = -812067392
mmci-omap-hs mmci-omap-hs.2: Failed to get debounce clock
REQUEST IRQ = 83 HOST = -812066368
mmci-omap-hs mmci-omap-hs.2: Unable to grab HSMMC IRQ
mmci-omap-hs mmci-omap-hs.2: Probe Failed
mmci-omap-hs: probe of mmci-omap-hs.2 failed with error -16

For some reason mmc1 and mmc3 ask for the same interrupt 83 ???

Why would this be assigned the same value?

> So far I have reconfigured the pins with uboot to GPIO and tested each
> pin to verify that the signals are connected properly.  That test
> passed.
> Then I reconfigured them back to MODE 2(mmc modes) for each pin.  I am
> confident that the level transceiver(TXS0108ERGYR) is operating
> properly. This transceiver is automatic so no external controls are
> necessary.
>
>
> <u-boot_snip>
>  MUX_VAL(CP(ETK_CLK_ES2),       (IDIS | PTU | EN  | M2)) /*MMC3_CLK*/\
>  MUX_VAL(CP(ETK_CTL_ES2),       (IEN  | PTU | EN  | M2)) /*MMC3_CMD*/\
>  MUX_VAL(CP(ETK_D3_ES2),        (IEN  | PTU | EN  | M2)) /*MMC3_DAT3*/\
>  MUX_VAL(CP(ETK_D4_ES2),        (IEN  | PTU | EN  | M2)) /*MMC3_DAT0*/\
>  MUX_VAL(CP(ETK_D5_ES2),        (IEN  | PTU | EN  | M2)) /*MMC3_DAT1*/\
>  MUX_VAL(CP(ETK_D6_ES2),        (IEN  | PTU | EN  | M2)) /*MMC3_DAT2*/\
> </u-boot_snip>
>
> <mmc_params>
> // I Switched mmc 2 and 3 in a feeble attempt.  Also I removed 2 in an
> earlier attempt and the kernel would not boot ???????
> // Also I have tested working gpio connected to CD and WP but not
> attempting to tackle that yet.
> static struct twl4030_hsmmc_info mmc[] = {
>        {
>                .mmc            = 1,
>                .wires          = 4,
>                .gpio_cd        = -EINVAL,
>                .gpio_wp        = -EINVAL,
>        },
>        {
>                .mmc            = 3,
>                .wires          = 4,
>                .gpio_cd        = -EINVAL,
>                .gpio_wp        = -EINVAL,
>        },
>        {
>                .mmc            = 2,
>                .wires          = 4,
>                .gpio_cd        = -EINVAL,
>                .gpio_wp        = -EINVAL,
>                .transceiver    = true,
>                .ocr_mask       = 0x00100000,   /* 3.3V */
>        },
>        {}      /* Terminator */
> };
> </mmc_params>
>
> <twl_setup>
>
> static int overo_twl_gpio_setup(struct device *dev,
>                unsigned gpio, unsigned ngpio)
> {
>        twl4030_mmc_init(mmc);        <-- mmc params    passed to init
>
>        overo_vmmc1_supply.dev = mmc[0].dev;
>
>        return 0;
> }
> static struct twl4030_gpio_platform_data overo_gpio_data = {
>        .gpio_base      = OMAP_MAX_GPIO_LINES,
>        .irq_base       = TWL4030_GPIO_IRQ_BASE,
>        .irq_end        = TWL4030_GPIO_IRQ_END,
>        .setup          = overo_twl_gpio_setup,
> <-----    setup passed into the twl4030 gpio platform data
> };
>
> static struct twl4030_platform_data overo_twldata = {
>        .irq_base       = TWL4030_IRQ_BASE,
>        .irq_end        = TWL4030_IRQ_END,
>        .gpio           = &overo_gpio_data,
> <--- gpio data passed into twl4030 plat data
>        .usb            = &overo_usb_data,
>        .power          = GENERIC3430_T2SCRIPTS_DATA,
>        .vmmc1          = &overo_vmmc1,
> };
>
> static struct i2c_board_info __initdata overo_i2c_boardinfo[] = {
>        {
>                I2C_BOARD_INFO("tps65950", 0x48),
>                .flags = I2C_CLIENT_WAKE,
>                .irq = INT_34XX_SYS_NIRQ,
>                .platform_data = &overo_twldata,
>        },
> };
>
> static int __init overo_i2c_init(void)
> {
>        omap_register_i2c_bus(1, 2600, overo_i2c_boardinfo,
>                        ARRAY_SIZE(overo_i2c_boardinfo));
>        /* i2c2 pins are used for gpio */
>        omap_register_i2c_bus(3, 400, NULL, 0);
>        return 0;
> }
>
> // i2c_init called first in init.
> static void __init overo_init(void)
> {
>        overo_i2c_init();
>  .....
>  </twl_setup>
>
>
> So the way I see it working is i2c is initialized, which sets up the
> twl4030.  When the twl4030 configures gpio it initializes the mmc.
> mmc0 comes up fine (I have a root File System), but I never get a clk
> on mmc3.
>
> Any help would be greatly appreciated.
>
> Thanks
> John Sarman
>
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux