diff options
Diffstat (limited to 'drivers/mmc/host/sdhci-pci.c')
-rw-r--r-- | drivers/mmc/host/sdhci-pci.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c index 0716dcffd511..deb607c52c0d 100644 --- a/drivers/mmc/host/sdhci-pci.c +++ b/drivers/mmc/host/sdhci-pci.c | |||
@@ -142,6 +142,7 @@ static int jmicron_probe(struct sdhci_pci_chip *chip) | |||
142 | if (chip->pdev->revision == 0) { | 142 | if (chip->pdev->revision == 0) { |
143 | chip->quirks |= SDHCI_QUIRK_32BIT_DMA_ADDR | | 143 | chip->quirks |= SDHCI_QUIRK_32BIT_DMA_ADDR | |
144 | SDHCI_QUIRK_32BIT_DMA_SIZE | | 144 | SDHCI_QUIRK_32BIT_DMA_SIZE | |
145 | SDHCI_QUIRK_32BIT_ADMA_SIZE | | ||
145 | SDHCI_QUIRK_RESET_AFTER_REQUEST; | 146 | SDHCI_QUIRK_RESET_AFTER_REQUEST; |
146 | } | 147 | } |
147 | 148 | ||
@@ -206,6 +207,22 @@ static void jmicron_enable_mmc(struct sdhci_host *host, int on) | |||
206 | 207 | ||
207 | static int jmicron_probe_slot(struct sdhci_pci_slot *slot) | 208 | static int jmicron_probe_slot(struct sdhci_pci_slot *slot) |
208 | { | 209 | { |
210 | if (slot->chip->pdev->revision == 0) { | ||
211 | u16 version; | ||
212 | |||
213 | version = readl(slot->host->ioaddr + SDHCI_HOST_VERSION); | ||
214 | version = (version & SDHCI_VENDOR_VER_MASK) >> | ||
215 | SDHCI_VENDOR_VER_SHIFT; | ||
216 | |||
217 | /* | ||
218 | * Older versions of the chip have lots of nasty glitches | ||
219 | * in the ADMA engine. It's best just to avoid it | ||
220 | * completely. | ||
221 | */ | ||
222 | if (version < 0xAC) | ||
223 | slot->host->quirks |= SDHCI_QUIRK_BROKEN_ADMA; | ||
224 | } | ||
225 | |||
209 | /* | 226 | /* |
210 | * The secondary interface requires a bit set to get the | 227 | * The secondary interface requires a bit set to get the |
211 | * interrupts. | 228 | * interrupts. |