From 2f7816b16d054ef68b4947d75ae75f4001e55c9a Mon Sep 17 00:00:00 2001 From: Sarthak Garg Date: Thu, 29 Oct 2020 14:38:25 +0530 Subject: [PATCH] mmc: sdhci-msm: Reset host->pwr and POWER_CONTROL register When the SD card is removed regulators are never turned ON. Reset host->pwr and POWER_CONTROL register accordingly. Change-Id: I6fb9d357c54d172fb3447e4f0b7ceaaf48c9dbf7 Signed-off-by: Sarthak Garg Signed-off-by: Ram Prakash Gupta --- drivers/mmc/host/sdhci-msm.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c index 38615e032c99..dcf331214416 100644 --- a/drivers/mmc/host/sdhci-msm.c +++ b/drivers/mmc/host/sdhci-msm.c @@ -1857,14 +1857,6 @@ static void sdhci_msm_check_power_status(struct sdhci_host *host, u32 req_type) return; } - if (mmc->card && mmc->ops->get_cd && !mmc->ops->get_cd(mmc) && - (req_type & REQ_BUS_ON)) { - pr_debug( - "%s: Regulators are never turned on when SD card is removed so do not wait for pwr irq\n", - mmc_hostname(host->mmc)); - return; - } - if ((req_type & msm_host->curr_pwr_state) || (req_type & msm_host->curr_io_level)) done = true; @@ -1882,6 +1874,13 @@ static void sdhci_msm_check_power_status(struct sdhci_host *host, u32 req_type) "%s: pwr_irq for req: (%d) timed out\n", mmc_hostname(host->mmc), req_type); } + + if (mmc->card && mmc->ops->get_cd && !mmc->ops->get_cd(mmc) && + (req_type & REQ_BUS_ON)) { + host->pwr = 0; + sdhci_writeb(host, 0, SDHCI_POWER_CONTROL); + } + pr_debug("%s: %s: request %d done\n", mmc_hostname(host->mmc), __func__, req_type); }