From da2d1c69d66f8a4028b5f93fc972652b79bbb648 Mon Sep 17 00:00:00 2001 From: Dmitry Shmidt Date: Thu, 12 Aug 2010 18:08:40 -0700 Subject: [PATCH] mmc: sdhci: Skip mmc suspend/resume ops for SDIO device, enable/disable sdc irq instead of request/free, mask all sdc interrupts on suspend Change-Id: I3fb137363c6e639882b796aff8b80784c5256a71 Signed-off-by: Dmitry Shmidt --- drivers/mmc/host/sdhci.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 4d441d2194e9..0a544d79252e 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -24,6 +24,7 @@ #include #include +#include #include "sdhci.h" @@ -1633,19 +1634,22 @@ out: int sdhci_suspend_host(struct sdhci_host *host, pm_message_t state) { - int ret; + int ret = 0; + struct mmc_host *mmc = host->mmc; sdhci_disable_card_detection(host); - ret = mmc_suspend_host(host->mmc); - if (ret) - return ret; + if (mmc->card && (mmc->card->type != MMC_TYPE_SDIO)) + ret = mmc_suspend_host(host->mmc); - free_irq(host->irq, host); + sdhci_mask_irqs(host, SDHCI_INT_ALL_MASK); if (host->vmmc) ret = regulator_disable(host->vmmc); + if (host->irq) + disable_irq(host->irq); + return ret; } @@ -1653,7 +1657,8 @@ EXPORT_SYMBOL_GPL(sdhci_suspend_host); int sdhci_resume_host(struct sdhci_host *host) { - int ret; + int ret = 0; + struct mmc_host *mmc = host->mmc; if (host->vmmc) { int ret = regulator_enable(host->vmmc); @@ -1667,15 +1672,15 @@ int sdhci_resume_host(struct sdhci_host *host) host->ops->enable_dma(host); } - ret = request_irq(host->irq, sdhci_irq, IRQF_SHARED, - mmc_hostname(host->mmc), host); - if (ret) - return ret; + if (host->irq) + enable_irq(host->irq); sdhci_init(host, (host->mmc->pm_flags & MMC_PM_KEEP_POWER)); mmiowb(); - ret = mmc_resume_host(host->mmc); + if (mmc->card && (mmc->card->type != MMC_TYPE_SDIO)) + ret = mmc_resume_host(host->mmc); + sdhci_enable_card_detection(host); return ret; -- 2.34.1