sdhci: Fix missing runtime_pm get/put.
authorAymen Zayet <aymenx.zayet@intel.com>
Mon, 21 Nov 2011 18:16:18 +0000 (19:16 +0100)
committerbuildbot <buildbot@intel.com>
Mon, 28 Nov 2011 19:38:25 +0000 (11:38 -0800)
BZ: 15061

make sure that card is powered on / off when required.

Signed-off-by: Aymen Zayet <aymenx.zayet@intel.com>
Change-Id: I3c6183fa5ac85caf64f61048447ed2880c6c4828
Signed-off-by: Aymen Zayet <aymenx.zayet@intel.com>
Reviewed-on: http://android.intel.com:8080/25378
Reviewed-by: Champciaux, NicolasX <nicolasx.champciaux@intel.com>
Tested-by: Champciaux, NicolasX <nicolasx.champciaux@intel.com>
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
drivers/mmc/host/sdhci.c

index 085e037..637393c 100644 (file)
@@ -1696,6 +1696,7 @@ static int sdhci_check_ro(struct sdhci_host *host)
 {
        unsigned long flags;
        int is_readonly;
+       sdhci_runtime_pm_get(host);
 
        spin_lock_irqsave(&host->lock, flags);
 
@@ -1709,6 +1710,7 @@ static int sdhci_check_ro(struct sdhci_host *host)
 
        spin_unlock_irqrestore(&host->lock, flags);
 
+       sdhci_runtime_pm_put(host);
        /* This quirk needs to be replaced by a callback-function later */
        return host->quirks & SDHCI_QUIRK_INVERTED_WRITE_PROTECT ?
                !is_readonly : is_readonly;
@@ -1758,6 +1760,7 @@ static int sdhci_get_ro(struct mmc_host *mmc)
 
 static void sdhci_enable_sdio_irq_nolock(struct sdhci_host *host, int enable)
 {
+       sdhci_runtime_pm_get(host);
        if (host->flags & SDHCI_DEVICE_DEAD)
                goto out;
 
@@ -1776,6 +1779,7 @@ static void sdhci_enable_sdio_irq_nolock(struct sdhci_host *host, int enable)
                sdhci_mask_irqs(host, SDHCI_INT_CARD_INT);
 out:
        mmiowb();
+       sdhci_runtime_pm_put(host);
 }
 
 static void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable)
@@ -2940,6 +2944,8 @@ int sdhci_add_host(struct sdhci_host *host)
 
        mmc->caps |= MMC_CAP_SDIO_IRQ | MMC_CAP_ERASE | MMC_CAP_CMD23;
 
+       mmc->caps |= MMC_CAP_POWER_OFF_CARD;
+
        if (host->quirks & SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12)
                host->flags |= SDHCI_AUTO_CMD12;