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-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html