@@ -242,6 +242,7 @@ static struct omap2_hsmmc_info mmc[] __initdata = {
.gpio_cd = -EINVAL,
.gpio_wp = -EINVAL,
.ext_clock = 1,
+ .needs_vmmc = 1,
},
{} /* Terminator */
};
@@ -201,12 +201,15 @@ static struct omap2_hsmmc_info mmc[] = {
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
.gpio_wp = 4,
.deferred = true,
+ .needs_vmmc = 1,
+ .needs_vmmc_aux = 1,
},
{
.mmc = 2,
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
.gpio_wp = 7,
.deferred = true,
+ .needs_vmmc = 1,
},
{} /* Terminator */
};
@@ -461,12 +461,14 @@ static struct omap2_hsmmc_info mmc[] = {
.nonremovable = true,
.ocr_mask = MMC_VDD_29_30,
.no_off_init = true,
+ .needs_vmmc = 1,
},
{
.mmc = 1,
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
.gpio_cd = -EINVAL,
.gpio_wp = -EINVAL,
+ .needs_vmmc = 1,
},
{
.mmc = 5,
@@ -476,6 +478,7 @@ static struct omap2_hsmmc_info mmc[] = {
.gpio_wp = -EINVAL,
.ocr_mask = MMC_VDD_165_195,
.nonremovable = true,
+ .needs_vmmc = 1,
},
{} /* Terminator */
};
@@ -407,6 +407,8 @@ static struct omap2_hsmmc_info mmc[] = {
.gpio_cd = -EINVAL,
.gpio_wp = -EINVAL,
.deferred = true,
+ .needs_vmmc = 1,
+ .needs_vmmc_aux = 1,
},
{
.mmc = 2,
@@ -100,6 +100,7 @@ static struct omap2_hsmmc_info mmc[] = {
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
.gpio_wp = 29,
.deferred = true,
+ .needs_vmmc = 1,
},
{} /* Terminator */
};
@@ -284,6 +284,7 @@ static struct omap2_hsmmc_info mmc[] = {
.gpio_cd = -EINVAL,
.gpio_wp = -EINVAL,
.deferred = true,
+ .needs_vmmc = 1,
},
#if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE)
{
@@ -291,6 +292,8 @@ static struct omap2_hsmmc_info mmc[] = {
.caps = MMC_CAP_4_BIT_DATA,
.gpio_cd = -EINVAL,
.gpio_wp = -EINVAL,
+ .needs_vmmc = 1,
+ .needs_vmmc_aux = 1,
},
#endif
{} /* Terminator */
@@ -358,6 +358,7 @@ static struct omap2_hsmmc_info mmc[] __initdata = {
.caps = MMC_CAP_4_BIT_DATA,
.gpio_cd = -EINVAL,
.gpio_wp = -EINVAL,
+ .needs_vmmc = 1,
},
{} /* Terminator */
};
@@ -263,6 +263,8 @@ static struct omap2_hsmmc_info mmc[] = {
.caps = MMC_CAP_4_BIT_DATA,
.gpio_wp = -EINVAL,
.deferred = true,
+ .needs_vmmc = 1,
+ .needs_vmmc_aux = 1,
},
{} /* Terminator */
};
@@ -309,6 +309,8 @@ static struct omap2_hsmmc_info mmc[] = {
.gpio_cd = -EINVAL,
.gpio_wp = 63,
.deferred = true,
+ .needs_vmmc = 1,
+ .needs_vmmc_aux = 1,
},
#ifdef CONFIG_WILINK_PLATFORM_DATA
{
@@ -318,6 +320,7 @@ static struct omap2_hsmmc_info mmc[] = {
.gpio_wp = -EINVAL,
.gpio_cd = -EINVAL,
.nonremovable = true,
+ .needs_vmmc = 1,
},
#endif
{} /* Terminator */
@@ -104,6 +104,7 @@ static struct omap2_hsmmc_info __initdata board_mmc_info[] = {
.caps = MMC_CAP_4_BIT_DATA,
.gpio_cd = -EINVAL,
.gpio_wp = -EINVAL,
+ .needs_vmmc = 1,
},
{} /* Terminator */
};
@@ -278,6 +278,7 @@ static struct omap2_hsmmc_info omap3pandora_mmc[] = {
.gpio_wp = 126,
.ext_clock = 0,
.deferred = true,
+ .needs_vmmc = 1,
},
{
.mmc = 2,
@@ -287,6 +288,7 @@ static struct omap2_hsmmc_info omap3pandora_mmc[] = {
.ext_clock = 1,
.transceiver = true,
.deferred = true,
+ .needs_vmmc = 1,
},
{
.mmc = 3,
@@ -294,6 +296,7 @@ static struct omap2_hsmmc_info omap3pandora_mmc[] = {
.gpio_cd = -EINVAL,
.gpio_wp = -EINVAL,
.init_card = pandora_wl1251_init_card,
+ .needs_vmmc = 1,
},
{} /* Terminator */
};
@@ -184,6 +184,8 @@ static struct omap2_hsmmc_info mmc[] = {
.gpio_cd = -EINVAL,
.gpio_wp = 23,
.deferred = true,
+ .needs_vmmc = 1,
+ .needs_vmmc_aux = 1,
},
{} /* Terminator */
};
@@ -103,6 +103,8 @@ static struct omap2_hsmmc_info mmc[] = {
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
.gpio_wp = 29,
.deferred = true,
+ .needs_vmmc = 1,
+ .needs_vmmc_aux = 1,
},
{} /* Terminator */
};
@@ -199,6 +199,7 @@ static struct omap2_hsmmc_info mmc[] = {
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
.gpio_wp = -EINVAL,
.gpio_cd = -EINVAL,
+ .needs_vmmc = 1,
},
{
.name = "wl1271",
@@ -208,6 +209,7 @@ static struct omap2_hsmmc_info mmc[] = {
.gpio_cd = -EINVAL,
.ocr_mask = MMC_VDD_165_195,
.nonremovable = true,
+ .needs_vmmc = 1,
},
{} /* Terminator */
};
@@ -285,6 +285,7 @@ static struct omap2_hsmmc_info mmc[] = {
.caps = MMC_CAP_4_BIT_DATA,
.gpio_cd = -EINVAL,
.gpio_wp = -EINVAL,
+ .needs_vmmc = 1,
},
{
.mmc = 2,
@@ -106,6 +106,7 @@ static struct omap2_hsmmc_info mmc[] __initdata = {
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_MMC_HIGHSPEED,
.gpio_cd = -EINVAL,
.gpio_wp = -EINVAL,
+ .needs_vmmc = 1,
},
{ /* Terminator */ }
};
@@ -496,6 +496,7 @@ static struct omap2_hsmmc_info mmc[] __initdata = {
.gpio_cd = 160,
.gpio_wp = -EINVAL,
.power_saving = true,
+ .needs_vmmc = 1,
},
{
.name = "internal",
@@ -507,6 +508,8 @@ static struct omap2_hsmmc_info mmc[] __initdata = {
.nonremovable = true,
.power_saving = true,
.remux = rx51_mmc2_remux,
+ .needs_vmmc = 1,
+ .needs_vmmc_aux = 1,
},
{} /* Terminator */
};
@@ -205,6 +205,8 @@ static struct omap2_hsmmc_info mmc[] = {
.gpio_wp = -EINVAL,
.power_saving = true,
.deferred = true,
+ .needs_vmmc = 1,
+ .needs_vmmc_aux = 1,
},
{
.name = "internal",
@@ -214,6 +216,7 @@ static struct omap2_hsmmc_info mmc[] = {
.gpio_wp = -EINVAL,
.nonremovable = true,
.power_saving = true,
+ .needs_vmmc = 1,
},
{
.name = "wl1271",
@@ -222,6 +225,7 @@ static struct omap2_hsmmc_info mmc[] = {
.gpio_wp = -EINVAL,
.gpio_cd = -EINVAL,
.nonremovable = true,
+ .needs_vmmc = 1,
},
{} /* Terminator */
};
@@ -313,6 +313,8 @@ static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
c->mmc, 1);
mmc->slots[0].name = hc_name;
mmc->nr_slots = 1;
+ mmc->needs_vmmc = c->needs_vmmc;
+ mmc->needs_vmmc_aux = c->needs_vmmc_aux;
mmc->slots[0].caps = c->caps;
mmc->slots[0].pm_caps = c->pm_caps;
mmc->slots[0].internal_clock = !c->ext_clock;
@@ -33,6 +33,8 @@ struct omap2_hsmmc_info {
void (*remux)(struct device *dev, int slot, int power_on);
/* init some special card */
void (*init_card)(struct mmc_card *card);
+ unsigned needs_vmmc:1;
+ unsigned needs_vmmc_aux:1;
};
#if defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE)
@@ -66,6 +66,8 @@ struct omap_mmc_platform_data {
/* Register offset deviation */
u16 reg_offset;
+ unsigned needs_vmmc:1;
+ unsigned needs_vmmc_aux:1;
struct omap_mmc_slot_data {
Add needs_vmmc and needs_vmmc_aux to indicate whether regulator is applicable so that omap_hsmmc can handle regulator deferred probe error properly. Remove the assumption that vmmc_aux regulator to be available only if vmmc is present. Platforms can have fixed-always-ON regulator for vmmc and/or vmmc_aux in such cases regulator needed not be specified in board file. Signed-off-by: Balaji T K <balajitk@ti.com> --- arch/arm/mach-omap2/board-2430sdp.c | 1 + arch/arm/mach-omap2/board-3430sdp.c | 3 +++ arch/arm/mach-omap2/board-4430sdp.c | 3 +++ arch/arm/mach-omap2/board-cm-t35.c | 2 ++ arch/arm/mach-omap2/board-devkit8000.c | 1 + arch/arm/mach-omap2/board-igep0020.c | 3 +++ arch/arm/mach-omap2/board-ldp.c | 1 + arch/arm/mach-omap2/board-omap3beagle.c | 2 ++ arch/arm/mach-omap2/board-omap3evm.c | 3 +++ arch/arm/mach-omap2/board-omap3logic.c | 1 + arch/arm/mach-omap2/board-omap3pandora.c | 3 +++ arch/arm/mach-omap2/board-omap3stalker.c | 2 ++ arch/arm/mach-omap2/board-omap3touchbook.c | 2 ++ arch/arm/mach-omap2/board-omap4panda.c | 2 ++ arch/arm/mach-omap2/board-overo.c | 1 + arch/arm/mach-omap2/board-rm680.c | 1 + arch/arm/mach-omap2/board-rx51-peripherals.c | 3 +++ arch/arm/mach-omap2/board-zoom-peripherals.c | 4 ++++ arch/arm/mach-omap2/hsmmc.c | 2 ++ arch/arm/mach-omap2/hsmmc.h | 2 ++ include/linux/platform_data/mmc-omap.h | 2 ++ 21 files changed, 44 insertions(+), 0 deletions(-)