diff options
author | Anton Vorontsov <avorontsov@ru.mvista.com> | 2009-03-16 17:14:00 -0400 |
---|---|---|
committer | Pierre Ossman <drzeus@drzeus.cx> | 2009-03-24 16:30:10 -0400 |
commit | 3e3bf20756aeee57a40fd37b923263c9a51b8c68 (patch) | |
tree | 9cf64169c61208b59a1a6c16e0bfc48b45a1c7a7 /drivers/mmc/host/sdhci.c | |
parent | 8114634ccb54d67a8c01e5825d95bff4e7f7b357 (diff) |
sdhci: Add quirk for controllers that need small delays for PIO
Small udelay is needed to make eSDHC work in PIO mode. Without
the delay reading causes endless interrupt storm, and writing
corrupts data. The first guess would be that we must wait for
some bit in some register, but I didn't find any reliable bits
that change before and after the delay.
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
Diffstat (limited to 'drivers/mmc/host/sdhci.c')
-rw-r--r-- | drivers/mmc/host/sdhci.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 75d0ecbce10c..cd6dab34ba54 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c | |||
@@ -336,6 +336,9 @@ static void sdhci_transfer_pio(struct sdhci_host *host) | |||
336 | mask = ~0; | 336 | mask = ~0; |
337 | 337 | ||
338 | while (sdhci_readl(host, SDHCI_PRESENT_STATE) & mask) { | 338 | while (sdhci_readl(host, SDHCI_PRESENT_STATE) & mask) { |
339 | if (host->quirks & SDHCI_QUIRK_PIO_NEEDS_DELAY) | ||
340 | udelay(100); | ||
341 | |||
339 | if (host->data->flags & MMC_DATA_READ) | 342 | if (host->data->flags & MMC_DATA_READ) |
340 | sdhci_read_block_pio(host); | 343 | sdhci_read_block_pio(host); |
341 | else | 344 | else |