diff options
Diffstat (limited to 'drivers/mmc/host/omap_hsmmc.c')
-rw-r--r-- | drivers/mmc/host/omap_hsmmc.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c index 03c26e026506..8c863ccb1bfe 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c | |||
@@ -250,9 +250,9 @@ static int omap_hsmmc_1_set_power(struct device *dev, int slot, int power_on, | |||
250 | mmc_slot(host).before_set_reg(dev, slot, power_on, vdd); | 250 | mmc_slot(host).before_set_reg(dev, slot, power_on, vdd); |
251 | 251 | ||
252 | if (power_on) | 252 | if (power_on) |
253 | ret = mmc_regulator_set_ocr(host->vcc, vdd); | 253 | ret = mmc_regulator_set_ocr(host->mmc, host->vcc, vdd); |
254 | else | 254 | else |
255 | ret = mmc_regulator_set_ocr(host->vcc, 0); | 255 | ret = mmc_regulator_set_ocr(host->mmc, host->vcc, 0); |
256 | 256 | ||
257 | if (mmc_slot(host).after_set_reg) | 257 | if (mmc_slot(host).after_set_reg) |
258 | mmc_slot(host).after_set_reg(dev, slot, power_on, vdd); | 258 | mmc_slot(host).after_set_reg(dev, slot, power_on, vdd); |
@@ -291,18 +291,23 @@ static int omap_hsmmc_23_set_power(struct device *dev, int slot, int power_on, | |||
291 | * chips/cards need an interface voltage rail too. | 291 | * chips/cards need an interface voltage rail too. |
292 | */ | 292 | */ |
293 | if (power_on) { | 293 | if (power_on) { |
294 | ret = mmc_regulator_set_ocr(host->vcc, vdd); | 294 | ret = mmc_regulator_set_ocr(host->mmc, host->vcc, vdd); |
295 | /* Enable interface voltage rail, if needed */ | 295 | /* Enable interface voltage rail, if needed */ |
296 | if (ret == 0 && host->vcc_aux) { | 296 | if (ret == 0 && host->vcc_aux) { |
297 | ret = regulator_enable(host->vcc_aux); | 297 | ret = regulator_enable(host->vcc_aux); |
298 | if (ret < 0) | 298 | if (ret < 0) |
299 | ret = mmc_regulator_set_ocr(host->vcc, 0); | 299 | ret = mmc_regulator_set_ocr(host->mmc, |
300 | host->vcc, 0); | ||
300 | } | 301 | } |
301 | } else { | 302 | } else { |
303 | /* Shut down the rail */ | ||
302 | if (host->vcc_aux) | 304 | if (host->vcc_aux) |
303 | ret = regulator_disable(host->vcc_aux); | 305 | ret = regulator_disable(host->vcc_aux); |
304 | if (ret == 0) | 306 | if (!ret) { |
305 | ret = mmc_regulator_set_ocr(host->vcc, 0); | 307 | /* Then proceed to shut down the local regulator */ |
308 | ret = mmc_regulator_set_ocr(host->mmc, | ||
309 | host->vcc, 0); | ||
310 | } | ||
306 | } | 311 | } |
307 | 312 | ||
308 | if (mmc_slot(host).after_set_reg) | 313 | if (mmc_slot(host).after_set_reg) |
@@ -343,9 +348,9 @@ static int omap_hsmmc_23_set_sleep(struct device *dev, int slot, int sleep, | |||
343 | if (cardsleep) { | 348 | if (cardsleep) { |
344 | /* VCC can be turned off if card is asleep */ | 349 | /* VCC can be turned off if card is asleep */ |
345 | if (sleep) | 350 | if (sleep) |
346 | err = mmc_regulator_set_ocr(host->vcc, 0); | 351 | err = mmc_regulator_set_ocr(host->mmc, host->vcc, 0); |
347 | else | 352 | else |
348 | err = mmc_regulator_set_ocr(host->vcc, vdd); | 353 | err = mmc_regulator_set_ocr(host->mmc, host->vcc, vdd); |
349 | } else | 354 | } else |
350 | err = regulator_set_mode(host->vcc, mode); | 355 | err = regulator_set_mode(host->vcc, mode); |
351 | if (err) | 356 | if (err) |