Index: linux-wbsd/drivers/mmc/mmc.c =================================================================== --- linux-wbsd/drivers/mmc/mmc.c (revision 72) +++ linux-wbsd/drivers/mmc/mmc.c (working copy) @@ -666,13 +666,26 @@ 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. */ if (host->ocr) + { + +#ifdef CONFIG_MMC_POWERCYCLE + mmc_power_off(host); + mmc_delay(100); + mmc_power_up(host); +#endif /* CONFIG_MMC_POWERCYCLE */ + mmc_idle_cards(host); + } } else { host->ios.bus_mode = MMC_BUSMODE_OPENDRAIN; host->ios.clock = host->f_min; Index: linux-wbsd/drivers/mmc/Kconfig =================================================================== --- linux-wbsd/drivers/mmc/Kconfig (revision 95) +++ linux-wbsd/drivers/mmc/Kconfig (revision 96) @@ -19,6 +19,18 @@ This is an option for use by developers; most people should say N here. This enables MMC core and driver debugging. +config MMC_POWERCYCLE + bool "Reboot cards after scan (EXPERIMENTAL)" + depends on MMC != n && EXPERIMENTAL + default n + help + Some cards to not follow the MMC spec. fully and shut down + during init. Enable this option to reboot the card after + the initial scan. + + Most people should say N here. If you happen to have a card + that isn't detected then try enabling this option. + config MMC_BLOCK tristate "MMC block device driver" depends on MMC