diff options
author | Ben Dooks <ben@simtec.co.uk> | 2009-06-14 07:40:53 -0400 |
---|---|---|
committer | Pierre Ossman <pierre@ossman.eu> | 2009-06-21 15:00:58 -0400 |
commit | 1388eefd5a5e6aaa3cb04070bfc2b944c1d24b82 (patch) | |
tree | 3af02c2da18bc0b8640f177e5636b0775c34e21f /drivers/mmc | |
parent | 6882a8c071d609f4c088bee41e79572c7cfc1790 (diff) |
sdhci: Add SDHCI_QUIRK_NO_MULTIBLOCK quirk
Add quirk to show the controller cannot do multi-block IO.
This is mainly for the Samsung SDHCI controller that currently
cannot manage to do multi-block PIO without timing out.
Signed-off-by: Ben Dooks <ben@simtec.co.uk>
Signed-off-by: Pierre Ossman <pierre@ossman.eu>
Diffstat (limited to 'drivers/mmc')
-rw-r--r-- | drivers/mmc/host/sdhci-s3c.c | 3 | ||||
-rw-r--r-- | drivers/mmc/host/sdhci.c | 2 | ||||
-rw-r--r-- | drivers/mmc/host/sdhci.h | 2 |
3 files changed, 6 insertions, 1 deletions
diff --git a/drivers/mmc/host/sdhci-s3c.c b/drivers/mmc/host/sdhci-s3c.c index 19246fe3d3e2..50997d2a63e7 100644 --- a/drivers/mmc/host/sdhci-s3c.c +++ b/drivers/mmc/host/sdhci-s3c.c | |||
@@ -329,6 +329,9 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev) | |||
329 | * support as well. */ | 329 | * support as well. */ |
330 | host->quirks |= SDHCI_QUIRK_BROKEN_DMA; | 330 | host->quirks |= SDHCI_QUIRK_BROKEN_DMA; |
331 | 331 | ||
332 | /* PIO currently has problems with multi-block IO */ | ||
333 | host->quirks |= SDHCI_QUIRK_NO_MULTIBLOCK; | ||
334 | |||
332 | #endif /* CONFIG_MMC_SDHCI_S3C_DMA */ | 335 | #endif /* CONFIG_MMC_SDHCI_S3C_DMA */ |
333 | 336 | ||
334 | /* It seems we do not get an DATA transfer complete on non-busy | 337 | /* It seems we do not get an DATA transfer complete on non-busy |
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index e54d6fba85e1..3856669aa7e8 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c | |||
@@ -1834,7 +1834,7 @@ int sdhci_add_host(struct sdhci_host *host) | |||
1834 | /* | 1834 | /* |
1835 | * Maximum block count. | 1835 | * Maximum block count. |
1836 | */ | 1836 | */ |
1837 | mmc->max_blk_count = 65535; | 1837 | mmc->max_blk_count = (host->quirks & SDHCI_QUIRK_NO_MULTIBLOCK) ? 1 : 65535; |
1838 | 1838 | ||
1839 | /* | 1839 | /* |
1840 | * Init tasklets. | 1840 | * Init tasklets. |
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h index 2de08349c3ca..84d149096f0e 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h | |||
@@ -226,6 +226,8 @@ struct sdhci_host { | |||
226 | #define SDHCI_QUIRK_RESTORE_IRQS_AFTER_RESET (1<<19) | 226 | #define SDHCI_QUIRK_RESTORE_IRQS_AFTER_RESET (1<<19) |
227 | /* Controller has to be forced to use block size of 2048 bytes */ | 227 | /* Controller has to be forced to use block size of 2048 bytes */ |
228 | #define SDHCI_QUIRK_FORCE_BLK_SZ_2048 (1<<20) | 228 | #define SDHCI_QUIRK_FORCE_BLK_SZ_2048 (1<<20) |
229 | /* Controller cannot do multi-block transfers */ | ||
230 | #define SDHCI_QUIRK_NO_MULTIBLOCK (1<<21) | ||
229 | 231 | ||
230 | int irq; /* Device IRQ */ | 232 | int irq; /* Device IRQ */ |
231 | void __iomem * ioaddr; /* Mapped address */ | 233 | void __iomem * ioaddr; /* Mapped address */ |