aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKishore Kadiyala <kishore.kadiyala@ti.com>2010-08-10 21:01:46 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2010-08-11 11:59:03 -0400
commit27151dc9e363c0033d7375863c0d284f8c4b636a (patch)
tree401329dc2634b84f427bb4338e9f556912f4ee7a
parentfc8a0985c2846292312556cba10b8a4182f55967 (diff)
mmc: omap: fix for bus width which improves SD card's peformance.
This patch improves low speeds for SD cards. OMAP-MMC controller's can support maximum bus width of '8'. when bus width is mentioned as "8" in controller data,the SD stack will check whether bus width is "4" and if not it will set bus width to "1" and there by degrading performance. This patch fixes the issue and improves the performance of SD cards. Signed-off-by: Kishore Kadiyala <kishore.kadiyala@ti.com> Signed-off-by: Venkatraman S <svenkatr@ti.com> Signed-off-by: Nishanth Menon <nm@ti.com> Acked-by: Madhusudhan Chikkature <madhu.cr@ti.com> Tested-by: Jarkko Nikula <jhnikula@gmail.com> Cc: Adrian Hunter <adrian.hunter@nokia.com> Cc: Matt Fleming <matt@console-pimps.org> Cc: Tony Lindgren <tony@atomide.com> Cc: <linux-mmc@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--drivers/mmc/host/omap_hsmmc.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
index b032828c6126..a0c8515cb3b9 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
@@ -2096,10 +2096,23 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
2096 mmc->caps |= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED | 2096 mmc->caps |= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED |
2097 MMC_CAP_WAIT_WHILE_BUSY; 2097 MMC_CAP_WAIT_WHILE_BUSY;
2098 2098
2099 if (mmc_slot(host).wires >= 8) 2099 switch (mmc_slot(host).wires) {
2100 case 8:
2100 mmc->caps |= MMC_CAP_8_BIT_DATA; 2101 mmc->caps |= MMC_CAP_8_BIT_DATA;
2101 else if (mmc_slot(host).wires >= 4) 2102 /* Fall through */
2103 case 4:
2102 mmc->caps |= MMC_CAP_4_BIT_DATA; 2104 mmc->caps |= MMC_CAP_4_BIT_DATA;
2105 break;
2106 case 1:
2107 /* Nothing to crib here */
2108 case 0:
2109 /* Assuming nothing was given by board, Core use's 1-Bit */
2110 break;
2111 default:
2112 /* Completely unexpected.. Core goes with 1-Bit Width */
2113 dev_crit(mmc_dev(host->mmc), "Invalid width %d\n used!"
2114 "using 1 instead\n", mmc_slot(host).wires);
2115 }
2103 2116
2104 if (mmc_slot(host).nonremovable) 2117 if (mmc_slot(host).nonremovable)
2105 mmc->caps |= MMC_CAP_NONREMOVABLE; 2118 mmc->caps |= MMC_CAP_NONREMOVABLE;