|
@@ -2321,6 +2321,7 @@ EXPORT_SYMBOL(mmc_flush_cache);
|
|
|
int mmc_cache_ctrl(struct mmc_host *host, u8 enable)
|
|
|
{
|
|
|
struct mmc_card *card = host->card;
|
|
|
+ unsigned int timeout;
|
|
|
int err = 0;
|
|
|
|
|
|
if (!(host->caps2 & MMC_CAP2_CACHE_CTRL) ||
|
|
@@ -2331,16 +2332,18 @@ int mmc_cache_ctrl(struct mmc_host *host, u8 enable)
|
|
|
(card->ext_csd.cache_size > 0)) {
|
|
|
enable = !!enable;
|
|
|
|
|
|
- if (card->ext_csd.cache_ctrl ^ enable)
|
|
|
+ if (card->ext_csd.cache_ctrl ^ enable) {
|
|
|
+ timeout = enable ? card->ext_csd.generic_cmd6_time : 0;
|
|
|
err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
|
|
|
- EXT_CSD_CACHE_CTRL, enable, 0);
|
|
|
- if (err)
|
|
|
- pr_err("%s: cache %s error %d\n",
|
|
|
- mmc_hostname(card->host),
|
|
|
- enable ? "on" : "off",
|
|
|
- err);
|
|
|
- else
|
|
|
- card->ext_csd.cache_ctrl = enable;
|
|
|
+ EXT_CSD_CACHE_CTRL, enable, timeout);
|
|
|
+ if (err)
|
|
|
+ pr_err("%s: cache %s error %d\n",
|
|
|
+ mmc_hostname(card->host),
|
|
|
+ enable ? "on" : "off",
|
|
|
+ err);
|
|
|
+ else
|
|
|
+ card->ext_csd.cache_ctrl = enable;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return err;
|