unsigned long flags;
        u8 ctrl;
 
+       if (ios->power_mode == MMC_POWER_UNDEFINED)
+               return;
+
        spin_lock_irqsave(&host->lock, flags);
 
        if (host->flags & SDHCI_DEVICE_DEAD) {
 
        sdhci_init(host, 0);
 
-       /* Force clock and power re-program */
-       host->pwr = 0;
-       host->clock = 0;
-       mmc->ops->start_signal_voltage_switch(mmc, &mmc->ios);
-       mmc->ops->set_ios(mmc, &mmc->ios);
+       if (mmc->ios.power_mode != MMC_POWER_UNDEFINED) {
+               /* Force clock and power re-program */
+               host->pwr = 0;
+               host->clock = 0;
+               mmc->ops->start_signal_voltage_switch(mmc, &mmc->ios);
+               mmc->ops->set_ios(mmc, &mmc->ios);
 
-       if ((host_flags & SDHCI_PV_ENABLED) &&
-               !(host->quirks2 & SDHCI_QUIRK2_PRESET_VALUE_BROKEN)) {
-               spin_lock_irqsave(&host->lock, flags);
-               sdhci_enable_preset_value(host, true);
-               spin_unlock_irqrestore(&host->lock, flags);
-       }
+               if ((host_flags & SDHCI_PV_ENABLED) &&
+                   !(host->quirks2 & SDHCI_QUIRK2_PRESET_VALUE_BROKEN)) {
+                       spin_lock_irqsave(&host->lock, flags);
+                       sdhci_enable_preset_value(host, true);
+                       spin_unlock_irqrestore(&host->lock, flags);
+               }
 
-       if ((mmc->caps2 & MMC_CAP2_HS400_ES) &&
-           mmc->ops->hs400_enhanced_strobe)
-               mmc->ops->hs400_enhanced_strobe(mmc, &mmc->ios);
+               if ((mmc->caps2 & MMC_CAP2_HS400_ES) &&
+                   mmc->ops->hs400_enhanced_strobe)
+                       mmc->ops->hs400_enhanced_strobe(mmc, &mmc->ios);
+       }
 
        spin_lock_irqsave(&host->lock, flags);