diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-27 08:40:50 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-27 08:40:50 +0200 |
commit | 7e0a6fd5a4723c79cc46c9541e343092302e0e5b (patch) | |
tree | 7b1e3e7512eecdcc94811982766c25d64150a200 /drivers/mmc | |
parent | ca90666287401b475d9e0becf85bd02f069f1de8 (diff) | |
parent | 6cfa6279edbffa921b7d8c9519bfd83a24ba508e (diff) | |
download | linux-7e0a6fd5a4723c79cc46c9541e343092302e0e5b.tar.bz2 |
Merge branch 'amba' of http://ftp.arm.linux.org.uk/pub/linux/arm/kernel/git-cur/linux-2.6-arm
* 'amba' of http://ftp.arm.linux.org.uk/pub/linux/arm/kernel/git-cur/linux-2.6-arm:
ARM: 7079/1: spi: Fix builderror in spi-pl022.c
PM: add runtime PM support to MMCI
PM: add runtime PM support to core Primecell driver
Diffstat (limited to 'drivers/mmc')
-rw-r--r-- | drivers/mmc/host/mmci.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c index 56e9a4168264..5e142b7f5ecf 100644 --- a/drivers/mmc/host/mmci.c +++ b/drivers/mmc/host/mmci.c @@ -29,6 +29,7 @@ #include <linux/dmaengine.h> #include <linux/dma-mapping.h> #include <linux/amba/mmci.h> +#include <linux/pm_runtime.h> #include <asm/div64.h> #include <asm/io.h> @@ -170,6 +171,7 @@ mmci_request_end(struct mmci_host *host, struct mmc_request *mrq) * back into the driver... */ spin_unlock(&host->lock); + pm_runtime_put(mmc_dev(host->mmc)); mmc_request_done(host->mmc, mrq); spin_lock(&host->lock); } @@ -984,6 +986,8 @@ static void mmci_request(struct mmc_host *mmc, struct mmc_request *mrq) return; } + pm_runtime_get_sync(mmc_dev(mmc)); + spin_lock_irqsave(&host->lock, flags); host->mrq = mrq; @@ -1327,6 +1331,8 @@ static int __devinit mmci_probe(struct amba_device *dev, mmci_dma_setup(host); + pm_runtime_put(&dev->dev); + mmc_add_host(mmc); return 0; @@ -1364,6 +1370,12 @@ static int __devexit mmci_remove(struct amba_device *dev) if (mmc) { struct mmci_host *host = mmc_priv(mmc); + /* + * Undo pm_runtime_put() in probe. We use the _sync + * version here so that we can access the primecell. + */ + pm_runtime_get_sync(&dev->dev); + mmc_remove_host(mmc); writel(0, host->base + MMCIMASK0); |