diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c index fe1d90357653..c4bd0ecdf761 100644 --- a/drivers/mmc/core/host.c +++ b/drivers/mmc/core/host.c @@ -194,8 +194,13 @@ bool mmc_host_may_gate_card(struct mmc_card *card) * SDIO3.0 card allows the clock to be gated off so check if * that is the case or not. */ - if (mmc_card_sdio(card) && card->cccr.async_intr_sup) - return true; + if (mmc_card_sdio(card) && card->cccr.async_intr_sup) { + if (mmc_enable_qca6574_settings(card) || + mmc_enable_qca9377_settings(card)) + return false; + else + return true; + } /* * Don't gate SDIO cards! These need to be clocked at all times diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c index f632cc11995e..4848c26f4a1f 100644 --- a/drivers/mmc/host/sdhci-msm.c +++ b/drivers/mmc/host/sdhci-msm.c @@ -4323,6 +4323,12 @@ static int sdhci_msm_runtime_suspend(struct device *dev) ktime_t start = ktime_get(); int ret; + if (host->mmc->card && mmc_card_sdio(host->mmc->card)) { + if (mmc_enable_qca6574_settings(host->mmc->card) || + mmc_enable_qca9377_settings(host->mmc->card)) + return 0; + } + disable_irq(host->irq); disable_irq(msm_host->pwr_irq); @@ -4355,6 +4361,13 @@ static int sdhci_msm_runtime_resume(struct device *dev) ktime_t start = ktime_get(); int ret; + if (host->mmc->card && mmc_card_sdio(host->mmc->card)) { + if (mmc_enable_qca6574_settings(host->mmc->card) || + mmc_enable_qca9377_settings(host->mmc->card)) + return 0; + } + + if (host->is_crypto_en) { ret = sdhci_msm_enable_controller_clock(host); if (ret) {