diff options
Diffstat (limited to 'arch/arm/mach-omap2/hsmmc.c')
| -rw-r--r-- | arch/arm/mach-omap2/hsmmc.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/arch/arm/mach-omap2/hsmmc.c b/arch/arm/mach-omap2/hsmmc.c index b2f30bed5a20..66868c5d5a29 100644 --- a/arch/arm/mach-omap2/hsmmc.c +++ b/arch/arm/mach-omap2/hsmmc.c | |||
| @@ -145,6 +145,7 @@ static void omap4_hsmmc1_after_set_reg(struct device *dev, int slot, | |||
| 145 | int power_on, int vdd) | 145 | int power_on, int vdd) |
| 146 | { | 146 | { |
| 147 | u32 reg; | 147 | u32 reg; |
| 148 | unsigned long timeout; | ||
| 148 | 149 | ||
| 149 | if (power_on) { | 150 | if (power_on) { |
| 150 | reg = omap4_ctrl_pad_readl(control_pbias_offset); | 151 | reg = omap4_ctrl_pad_readl(control_pbias_offset); |
| @@ -157,9 +158,15 @@ static void omap4_hsmmc1_after_set_reg(struct device *dev, int slot, | |||
| 157 | OMAP4_MMC1_PWRDNZ_MASK | | 158 | OMAP4_MMC1_PWRDNZ_MASK | |
| 158 | OMAP4_USBC1_ICUSB_PWRDNZ_MASK); | 159 | OMAP4_USBC1_ICUSB_PWRDNZ_MASK); |
| 159 | omap4_ctrl_pad_writel(reg, control_pbias_offset); | 160 | omap4_ctrl_pad_writel(reg, control_pbias_offset); |
| 160 | /* 4 microsec delay for comparator to generate an error*/ | 161 | |
| 161 | udelay(4); | 162 | timeout = jiffies + msecs_to_jiffies(5); |
| 162 | reg = omap4_ctrl_pad_readl(control_pbias_offset); | 163 | do { |
| 164 | reg = omap4_ctrl_pad_readl(control_pbias_offset); | ||
| 165 | if (!(reg & OMAP4_MMC1_PBIASLITE_VMODE_ERROR_MASK)) | ||
| 166 | break; | ||
| 167 | usleep_range(100, 200); | ||
| 168 | } while (!time_after(jiffies, timeout)); | ||
| 169 | |||
| 163 | if (reg & OMAP4_MMC1_PBIASLITE_VMODE_ERROR_MASK) { | 170 | if (reg & OMAP4_MMC1_PBIASLITE_VMODE_ERROR_MASK) { |
| 164 | pr_err("Pbias Voltage is not same as LDO\n"); | 171 | pr_err("Pbias Voltage is not same as LDO\n"); |
| 165 | /* Caution : On VMODE_ERROR Power Down MMC IO */ | 172 | /* Caution : On VMODE_ERROR Power Down MMC IO */ |
| @@ -331,6 +338,9 @@ static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c, | |||
| 331 | if (c->no_off) | 338 | if (c->no_off) |
| 332 | mmc->slots[0].no_off = 1; | 339 | mmc->slots[0].no_off = 1; |
| 333 | 340 | ||
| 341 | if (c->no_off_init) | ||
| 342 | mmc->slots[0].no_regulator_off_init = c->no_off_init; | ||
| 343 | |||
| 334 | if (c->vcc_aux_disable_is_sleep) | 344 | if (c->vcc_aux_disable_is_sleep) |
| 335 | mmc->slots[0].vcc_aux_disable_is_sleep = 1; | 345 | mmc->slots[0].vcc_aux_disable_is_sleep = 1; |
| 336 | 346 | ||
