if ((MMC_EXTRACT_INDEX_FROM_ARG(cmd.arg) == EXT_CSD_SANITIZE_START) &&
            (cmd.opcode == MMC_SWITCH))
-               return mmc_sanitize(card);
+               return mmc_sanitize(card, idata->ic.cmd_timeout_ms);
 
        mmc_wait_for_req(card->host, &mrq);
 
 
 }
 EXPORT_SYMBOL_GPL(mmc_cmdq_disable);
 
-int mmc_sanitize(struct mmc_card *card)
+int mmc_sanitize(struct mmc_card *card, unsigned int timeout_ms)
 {
        struct mmc_host *host = card->host;
        int err;
                return -EOPNOTSUPP;
        }
 
+       if (!timeout_ms)
+               timeout_ms = MMC_SANITIZE_TIMEOUT_MS;
+
        pr_debug("%s: Sanitize in progress...\n", mmc_hostname(host));
 
        mmc_retune_hold(host);
 
        err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_SANITIZE_START,
-                        1, MMC_SANITIZE_TIMEOUT_MS);
+                        1, timeout_ms);
        if (err)
                pr_err("%s: Sanitize failed err=%d\n", mmc_hostname(host), err);
 
 
 int mmc_flush_cache(struct mmc_card *card);
 int mmc_cmdq_enable(struct mmc_card *card);
 int mmc_cmdq_disable(struct mmc_card *card);
-int mmc_sanitize(struct mmc_card *card);
+int mmc_sanitize(struct mmc_card *card, unsigned int timeout_ms);
 
 #endif