Difference between twl4030_hsmmc_info and omap_mmc_platform_data

From: Elvis Dowson
Date: Thu Oct 14 2010 - 17:49:13 EST


Hi,
I'm trying to bring up a TI WL1271 wlan module connected to MMC2 controller of a TI OMAP 3530 processor.

I am unclear about the difference between the use of twl4030_hsmmc_info and omap_mmc_platform_data, to set the attributes and constraints for the MMC1 (connected to microSD card) and MMC2 (connected to WLAN module).

The beagleboard uses twl4030_mmc_init, which has a wrapper for omap_mmc_platform_data defined in mmc-twl4030.h.

The board-sholes-hsmmc.c doesn't use twl4030, but directly uses the omap_mmc_platform_data structure.

Example:

board-omap3beagle.c uses twl4030_mmc_init, which internally uses the following structure to define mmc properties.

static struct twl4030_hsmmc_info mmc[] = {
{
.mmc = 1,
.wires = 8,
.gpio_wp = -ENOSYS,
.gpio_cd = -ENOSYS,
.name = "MMC1 controller slot"
},
{
.mmc = 2,
.wires = 4,
.gpio_cd = -EINVAL,
.gpio_wp = -EINVAL,
// .transceiver = true,
.name = "MMC2 controller slot",
.ocr_mask = 0x00000080,
},
{} /* Terminator */
};

For board-sholes-hsmmc.c, it uses a omap_mmc_platform_data

static struct omap_mmc_platform_data mmc1_data = {
.nr_slots = 1,
.init = hsmmc_late_init,
.cleanup = hsmmc_cleanup,
#ifdef CONFIG_PM
.suspend = hsmmc_suspend,
.resume = hsmmc_resume,
#endif
.dma_mask = 0xffffffff,
.slots[0] = {
.wires = 8,
.set_power = hsmmc_set_power,
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34 |
MMC_VDD_165_195,
.name = "first slot",
/* we get car_detect_irq later */
.card_detect_irq = 0,
.card_detect = hsmmc_card_detect,
},
};

#if defined(CONFIG_OMAP_HS_MMC2)
#ifdef CONFIG_MMC_EMBEDDED_SDIO
static struct sdio_embedded_func wifi_func_array[] = {
{
.f_class = SDIO_CLASS_NONE,
.f_maxblksize = 0,
},
{
.f_class = SDIO_CLASS_WLAN,
.f_maxblksize = 512,
},
};

static struct embedded_sdio_data sholes_wifi_emb_data = {
.cis = {
.vendor = 0x104c,
.device = 0x9066,
.blksize = 512,
.max_dtr = 24000000,
},
.cccr = {
.multi_block = 1,
.low_speed = 0,
.wide_bus = 1,
.high_power = 0,
.high_speed = 0,
},
.funcs = wifi_func_array,
.num_funcs = 2,
};
#endif

static struct omap_mmc_platform_data mmc2_data = {
.nr_slots = 1,
.init = hsmmc2_late_init,
.cleanup = hsmmc2_cleanup,
#ifdef CONFIG_PM
.suspend = hsmmc2_suspend,
.resume = hsmmc2_resume,
#endif
.dma_mask = 0xffffffff,
#ifndef CONFIG_MMC_EMBEDDED_SDIO
.name = "TIWLAN_SDIO",
#endif
.slots[0] = {
.wires = 4,
.set_power = hsmmc2_set_power,
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34 |
MMC_VDD_165_195,
.name = "first slot",
.internal_clock = 1,
.card_detect_irq = 0,
.card_detect = hsmmc2_card_detect,
#ifdef CONFIG_MMC_EMBEDDED_SDIO
.embedded_sdio = &sholes_wifi_emb_data,
.register_status_notify = &sholes_wifi_status_register,
#endif
},
};
#endif

Best regards,

Elvis Dowson
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/