Index: linux-wbsd/drivers/mmc/mmc.c =================================================================== --- linux-wbsd/drivers/mmc/mmc.c (revision 71) +++ linux-wbsd/drivers/mmc/mmc.c (working copy) @@ -666,13 +666,24 @@ host->ocr = mmc_select_voltage(host, ocr); /* - * Since we're changing the OCR value, we seem to - * need to tell some cards to go back to the idle - * state. We wait 1ms to give cards time to - * respond. + * Some cards shut down when receiving an OCR of + * zero. But since they send their mask before + * shutting down we can still calculate a correct + * voltage. To get them back to life we need to + * cycle power. + * + * When changing OCR values we also need to put + * the cards in idle state. But since we restart + * them here that point is moot. */ if (host->ocr) + { + mmc_power_off(host); + mmc_delay(100); + mmc_power_up(host); + mmc_idle_cards(host); + } } else { host->ios.bus_mode = MMC_BUSMODE_OPENDRAIN; host->ios.clock = host->f_min;