diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c index 8f29d6d15a94..6adbbc3f73e7 100644 --- a/drivers/mmc/host/sdhci-msm.c +++ b/drivers/mmc/host/sdhci-msm.c @@ -3214,8 +3214,7 @@ static int sdhci_msm_probe(struct platform_device *pdev) msm_host->mmc->caps |= MMC_CAP_AGGRESSIVE_PM; msm_host->mmc->caps |= MMC_CAP_WAIT_WHILE_BUSY; - - msm_host->pltfm_init_done = true; + msm_host->mmc->caps |= MMC_CAP_NEED_RSP_BUSY; #if defined(CONFIG_SDC_QTI) msm_host->mmc->caps2 |= MMC_CAP2_CLK_SCALE; @@ -3233,6 +3232,20 @@ static int sdhci_msm_probe(struct platform_device *pdev) goto pm_runtime_disable; sdhci_msm_set_regulator_caps(msm_host); + /* + * Ensure larger discard size by setting max_busy_timeout. + * This has to set only after sdhci_add_host so that our + * value won't be over-written. + */ + host->mmc->max_busy_timeout = 0; + + /* + * Set platfm_init_done only after sdhci_add_host(). + * So that we don't turn off vqmmc while we reset sdhc as + * part of sdhci_add_host(). + */ + msm_host->pltfm_init_done = true; + pm_runtime_mark_last_busy(&pdev->dev); pm_runtime_put_autosuspend(&pdev->dev);