aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/core/core.c
diff options
context:
space:
mode:
authorSeungwon Jeon <tgih.jun@samsung.com>2011-12-09 03:47:17 -0500
committerChris Ball <cjb@laptop.org>2012-01-12 15:17:14 -0500
commit8bc0678b845531221ba2ea6efe34db66e587705b (patch)
treed0ffa31202536d956de642786d39be023e57c71f /drivers/mmc/core/core.c
parent984589e59f5796b4ef9a778c6a1937fc9319c423 (diff)
mmc: core: Separate the timeout value for cache-ctrl
Turning the cache off implies flushing cache which doesn't define maximum timeout unlike cache-on. This patch will apply the generic CMD6 timeout only for cache-on. Additionally the kernel message is added for checking failure case of cache-on. Signed-off-by: Seungwon Jeon <tgih.jun@samsung.com> Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'drivers/mmc/core/core.c')
-rw-r--r--drivers/mmc/core/core.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index be7569f3fb56..1da45e051328 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -2321,6 +2321,7 @@ EXPORT_SYMBOL(mmc_flush_cache);
2321int mmc_cache_ctrl(struct mmc_host *host, u8 enable) 2321int mmc_cache_ctrl(struct mmc_host *host, u8 enable)
2322{ 2322{
2323 struct mmc_card *card = host->card; 2323 struct mmc_card *card = host->card;
2324 unsigned int timeout;
2324 int err = 0; 2325 int err = 0;
2325 2326
2326 if (!(host->caps2 & MMC_CAP2_CACHE_CTRL) || 2327 if (!(host->caps2 & MMC_CAP2_CACHE_CTRL) ||
@@ -2331,16 +2332,18 @@ int mmc_cache_ctrl(struct mmc_host *host, u8 enable)
2331 (card->ext_csd.cache_size > 0)) { 2332 (card->ext_csd.cache_size > 0)) {
2332 enable = !!enable; 2333 enable = !!enable;
2333 2334
2334 if (card->ext_csd.cache_ctrl ^ enable) 2335 if (card->ext_csd.cache_ctrl ^ enable) {
2336 timeout = enable ? card->ext_csd.generic_cmd6_time : 0;
2335 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, 2337 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
2336 EXT_CSD_CACHE_CTRL, enable, 0); 2338 EXT_CSD_CACHE_CTRL, enable, timeout);
2337 if (err) 2339 if (err)
2338 pr_err("%s: cache %s error %d\n", 2340 pr_err("%s: cache %s error %d\n",
2339 mmc_hostname(card->host), 2341 mmc_hostname(card->host),
2340 enable ? "on" : "off", 2342 enable ? "on" : "off",
2341 err); 2343 err);
2342 else 2344 else
2343 card->ext_csd.cache_ctrl = enable; 2345 card->ext_csd.cache_ctrl = enable;
2346 }
2344 } 2347 }
2345 2348
2346 return err; 2349 return err;