void __init omap2_init_mmc(struct omap_mmc_platform_data **mmc_data, int nr_controllers) { int i; char *name; for (i = 1; i < nr_controllers; i++) { unsigned long base, size; unsigned int irq = 0; if (!mmc_data[i]) continue; omap2_mmc_mux(mmc_data[i], i); switch (i) { case 0: base = OMAP2_MMC1_BASE; irq = INT_24XX_MMC_IRQ; break; case 1: base = OMAP2_MMC2_BASE; irq = INT_24XX_MMC2_IRQ; break; case 2: if (!(cpu_is_omap34xx() || cpu_is_omap3630())) return; base = OMAP3_MMC3_BASE; irq = INT_34XX_MMC3_IRQ; break; default: continue; } if (cpu_is_omap2420()) { size = OMAP2420_MMC_SIZE; name = "mmci-omap"; } else { size = HSMMC_SIZE; if (mmc_data[i]->name) name = mmc_data[i]->name; else name = "mmci-omap-hs"; } omap_mmc_add(name, i, base, size, irq, mmc_data[i]); //#if 0 if(1==i) { printk(KERN_ERR "SD/MMC devices, enumerating first eMMC.\n"); i-=2; } else if(0==i){ printk(KERN_ERR "SD/MMC devices, checking for SD card devices attached.\n"); i++; } //#endif }; }
void __init omap2_init_mmc(struct omap_mmc_platform_data **mmc_data, int nr_controllers) { int i; char *name; for (i = 0; i < nr_controllers; i++) { unsigned long base, size; unsigned int irq = 0; if (!mmc_data[i]) continue; omap2_mmc_mux(mmc_data[i], i); switch (i) { case 0: base = OMAPW3G_MMC1_BASE; irq = INT_W3G_MMC_IRQ; break; case 1: base = OMAP2_MMC2_BASE; irq = INT_24XX_MMC2_IRQ; break; case 2: if (!cpu_is_omap34xx()) return; base = OMAP3_MMC3_BASE; irq = INT_34XX_MMC3_IRQ; break; default: continue; } if (cpu_is_omapw3g()){ size = OMAPW3G_MMC_SIZE; name = "mmci-omap-hs"; } else if (cpu_is_omap2420()) { size = OMAP2420_MMC_SIZE; name = "mmci-omap"; } else { size = HSMMC_SIZE; if (mmc_data[i]->name) name = mmc_data[i]->name; else name = "mmci-omap-hs"; } omap_mmc_add(name, i, base, size, irq, mmc_data[i]); } }
void __init omap2_init_mmc(struct omap_mmc_platform_data *mmc_data, int ctrl_nr) { struct omap_hwmod *oh; struct omap_device *od; struct omap_device_pm_latency *ohl; char oh_name[MAX_OMAP_MMC_HWMOD_NAME_LEN]; char *name; int l; int ohl_cnt = 0; if (cpu_is_omap2420()) { name = "mmci-omap"; } else { if (mmc_data->name) name = mmc_data->name; else name = "mmci-omap-hs"; ohl = omap_hsmmc_latency; ohl_cnt = ARRAY_SIZE(omap_hsmmc_latency); } l = snprintf(oh_name, MAX_OMAP_MMC_HWMOD_NAME_LEN, "mmc%d", ctrl_nr); WARN(l >= MAX_OMAP_MMC_HWMOD_NAME_LEN, "String buffer overflow in MMC%d device setup\n", ctrl_nr); oh = omap_hwmod_lookup(oh_name); if (!oh) { pr_err("Could not look up %s\n", oh_name); return; } mmc_data->dev_attr = oh->dev_attr; #ifdef CONFIG_OMAP_PM mmc_data->set_min_bus_tput = omap_pm_set_min_bus_tput; #endif omap2_mmc_mux(mmc_data, ctrl_nr - 1); od = omap_device_build(name, ctrl_nr - 1, oh, mmc_data, sizeof(struct omap_mmc_platform_data), ohl, ohl_cnt, false); WARN(IS_ERR(od), "Could not build omap_device for %s %s\n", name, oh_name); /* * return device handle to board setup code * required to populate for regulator framework structure */ mmc_data->dev = &od->pdev.dev; }
void __init omap2_init_mmc(struct omap_mmc_platform_data **mmc_data, int nr_controllers) { int i; char *name; for (i = 0; i < nr_controllers; i++) { unsigned long base, size; unsigned int irq = 0; if (!mmc_data[i]) continue; omap2_mmc_mux(mmc_data[i], i); switch (i) { case 0: base = OMAP2_MMC1_BASE; irq = INT_24XX_MMC_IRQ; break; case 1: base = OMAP2_MMC2_BASE; irq = INT_24XX_MMC2_IRQ; break; case 2: if (!cpu_is_omap44xx() && !cpu_is_omap34xx()) return; base = OMAP3_MMC3_BASE; irq = INT_34XX_MMC3_IRQ; break; case 3: if (!cpu_is_omap44xx()) return; base = OMAP4_MMC4_BASE + OMAP4_MMC_REG_OFFSET; irq = INT_44XX_MMC4_IRQ; break; case 4: if (!cpu_is_omap44xx()) return; base = OMAP4_MMC5_BASE + OMAP4_MMC_REG_OFFSET; irq = INT_44XX_MMC5_IRQ; break; default: continue; } if (cpu_is_omap2420()) { size = OMAP2420_MMC_SIZE; name = "mmci-omap"; } else if (cpu_is_omap44xx()) { if (i < 3) { base += OMAP4_MMC_REG_OFFSET; irq += IRQ_GIC_START; } size = OMAP4_HSMMC_SIZE; name = "mmci-omap-hs"; } else { size = OMAP3_HSMMC_SIZE; if (mmc_data[i]->name) name = mmc_data[i]->name; else name = "mmci-omap-hs"; } omap_mmc_add(name, i, base, size, irq, mmc_data[i]); }; }