aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/host/sdhci.c
diff options
context:
space:
mode:
authorAnton Vorontsov <avorontsov@ru.mvista.com>2009-03-16 17:14:03 -0400
committerPierre Ossman <drzeus@drzeus.cx>2009-03-24 16:30:10 -0400
commit0633f654241483edc8a235ab87264ff6bbcd08d5 (patch)
tree1812781af4af900c79b658f5c95afc79e0160a66 /drivers/mmc/host/sdhci.c
parent063a9dbbce5559770b7e2e2f51bd29adf3ab9b1e (diff)
sdhci: Add quirk for forcing maximum block size to 2048 bytes
FSL eSDHC controllers can support maximum block size up to 4096 bytes, the MBL (Maximum Block Length) field in the capabilities register extended by one bit, and is set to 0x3. But the SDHCI core doesn't support blocks of 4096 bytes, and thus forces blksz to the lowest value -- 512 bytes. With this patch we can pin up the blksz to the maximum supported block size, i.e. 2048 bytes. 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.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 3a72fe2cf1cf..30d8e3d4e6fd 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -1777,13 +1777,19 @@ int sdhci_add_host(struct sdhci_host *host)
1777 * Maximum block size. This varies from controller to controller and 1777 * Maximum block size. This varies from controller to controller and
1778 * is specified in the capabilities register. 1778 * is specified in the capabilities register.
1779 */ 1779 */
1780 mmc->max_blk_size = (caps & SDHCI_MAX_BLOCK_MASK) >> SDHCI_MAX_BLOCK_SHIFT; 1780 if (host->quirks & SDHCI_QUIRK_FORCE_BLK_SZ_2048) {
1781 if (mmc->max_blk_size >= 3) { 1781 mmc->max_blk_size = 2;
1782 printk(KERN_WARNING "%s: Invalid maximum block size, " 1782 } else {
1783 "assuming 512 bytes\n", mmc_hostname(mmc)); 1783 mmc->max_blk_size = (caps & SDHCI_MAX_BLOCK_MASK) >>
1784 mmc->max_blk_size = 512; 1784 SDHCI_MAX_BLOCK_SHIFT;
1785 } else 1785 if (mmc->max_blk_size >= 3) {
1786 mmc->max_blk_size = 512 << mmc->max_blk_size; 1786 printk(KERN_WARNING "%s: Invalid maximum block size, "
1787 "assuming 512 bytes\n", mmc_hostname(mmc));
1788 mmc->max_blk_size = 0;
1789 }
1790 }
1791
1792 mmc->max_blk_size = 512 << mmc->max_blk_size;
1787 1793
1788 /* 1794 /*
1789 * Maximum block count. 1795 * Maximum block count.