diff options
Diffstat (limited to 'drivers/mmc/host/sdhci.c')
-rw-r--r-- | drivers/mmc/host/sdhci.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 8a74fcbfe13b..55698864c2cd 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c | |||
@@ -1739,7 +1739,7 @@ EXPORT_SYMBOL_GPL(sdhci_alloc_host); | |||
1739 | int sdhci_add_host(struct sdhci_host *host) | 1739 | int sdhci_add_host(struct sdhci_host *host) |
1740 | { | 1740 | { |
1741 | struct mmc_host *mmc; | 1741 | struct mmc_host *mmc; |
1742 | unsigned int caps; | 1742 | unsigned int caps, ocr_avail; |
1743 | int ret; | 1743 | int ret; |
1744 | 1744 | ||
1745 | WARN_ON(host == NULL); | 1745 | WARN_ON(host == NULL); |
@@ -1893,13 +1893,26 @@ int sdhci_add_host(struct sdhci_host *host) | |||
1893 | mmc_card_is_removable(mmc)) | 1893 | mmc_card_is_removable(mmc)) |
1894 | mmc->caps |= MMC_CAP_NEEDS_POLL; | 1894 | mmc->caps |= MMC_CAP_NEEDS_POLL; |
1895 | 1895 | ||
1896 | mmc->ocr_avail = 0; | 1896 | ocr_avail = 0; |
1897 | if (caps & SDHCI_CAN_VDD_330) | 1897 | if (caps & SDHCI_CAN_VDD_330) |
1898 | mmc->ocr_avail |= MMC_VDD_32_33|MMC_VDD_33_34; | 1898 | ocr_avail |= MMC_VDD_32_33 | MMC_VDD_33_34; |
1899 | if (caps & SDHCI_CAN_VDD_300) | 1899 | if (caps & SDHCI_CAN_VDD_300) |
1900 | mmc->ocr_avail |= MMC_VDD_29_30|MMC_VDD_30_31; | 1900 | ocr_avail |= MMC_VDD_29_30 | MMC_VDD_30_31; |
1901 | if (caps & SDHCI_CAN_VDD_180) | 1901 | if (caps & SDHCI_CAN_VDD_180) |
1902 | mmc->ocr_avail |= MMC_VDD_165_195; | 1902 | ocr_avail |= MMC_VDD_165_195; |
1903 | |||
1904 | mmc->ocr_avail = ocr_avail; | ||
1905 | mmc->ocr_avail_sdio = ocr_avail; | ||
1906 | if (host->ocr_avail_sdio) | ||
1907 | mmc->ocr_avail_sdio &= host->ocr_avail_sdio; | ||
1908 | mmc->ocr_avail_sd = ocr_avail; | ||
1909 | if (host->ocr_avail_sd) | ||
1910 | mmc->ocr_avail_sd &= host->ocr_avail_sd; | ||
1911 | else /* normal SD controllers don't support 1.8V */ | ||
1912 | mmc->ocr_avail_sd &= ~MMC_VDD_165_195; | ||
1913 | mmc->ocr_avail_mmc = ocr_avail; | ||
1914 | if (host->ocr_avail_mmc) | ||
1915 | mmc->ocr_avail_mmc &= host->ocr_avail_mmc; | ||
1903 | 1916 | ||
1904 | if (mmc->ocr_avail == 0) { | 1917 | if (mmc->ocr_avail == 0) { |
1905 | printk(KERN_ERR "%s: Hardware doesn't report any " | 1918 | printk(KERN_ERR "%s: Hardware doesn't report any " |