diff options
Diffstat (limited to 'drivers/mmc/sdhci.c')
| -rw-r--r-- | drivers/mmc/sdhci.c | 17 | 
1 files changed, 15 insertions, 2 deletions
| diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c index b07dc0064..3bb0ad049 100644 --- a/drivers/mmc/sdhci.c +++ b/drivers/mmc/sdhci.c @@ -381,12 +381,25 @@ int sdhci_init(struct mmc *mmc)  		}  	} +	sdhci_set_power(host, fls(mmc->voltages) - 1); + +	if (host->quirks & SDHCI_QUIRK_NO_CD) { +		unsigned int status; + +		sdhci_writel(host, SDHCI_CTRL_CD_TEST_INS | SDHCI_CTRL_CD_TEST, +			SDHCI_HOST_CONTROL); + +		status = sdhci_readl(host, SDHCI_PRESENT_STATE); +		while ((!(status & SDHCI_CARD_PRESENT)) || +		    (!(status & SDHCI_CARD_STATE_STABLE)) || +		    (!(status & SDHCI_CARD_DETECT_PIN_LEVEL))) +			status = sdhci_readl(host, SDHCI_PRESENT_STATE); +	} +  	/* Eable all state */  	sdhci_writel(host, SDHCI_INT_ALL_MASK, SDHCI_INT_ENABLE);  	sdhci_writel(host, SDHCI_INT_ALL_MASK, SDHCI_SIGNAL_ENABLE); -	sdhci_set_power(host, fls(mmc->voltages) - 1); -  	return 0;  } |