aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc
diff options
context:
space:
mode:
authorBen Dooks <ben@simtec.co.uk>2009-06-14 07:40:53 -0400
committerPierre Ossman <pierre@ossman.eu>2009-06-21 15:00:58 -0400
commit1388eefd5a5e6aaa3cb04070bfc2b944c1d24b82 (patch)
tree3af02c2da18bc0b8640f177e5636b0775c34e21f /drivers/mmc
parent6882a8c071d609f4c088bee41e79572c7cfc1790 (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.c3
-rw-r--r--drivers/mmc/host/sdhci.c2
-rw-r--r--drivers/mmc/host/sdhci.h2
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 */