diff options
| author | Rabin Vincent <rabin.vincent@stericsson.com> | 2011-06-16 10:14:40 +0200 |
|---|---|---|
| committer | Linus WALLEIJ <linus.walleij@stericsson.com> | 2011-10-17 15:18:13 +0200 |
| commit | 6e78684ce1b8bc76c2f254cd621b717f337fcfda (patch) | |
| tree | ffa66e290178d8e7983c46de29341e64f20df924 /drivers | |
| parent | fc371b7b69805e3597cf87c753e142f0cb2461a4 (diff) | |
spi/pl022: support runtime PM
Insert notifiers for the runtime PM API. With this the runtime
PM layer kicks in to action where used.
Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com>
Reviewed-by: Virupax Sadashivpetimath <virupax.sadashivpetimath@stericsson.com>
Reviewed-by: Jonas Aberg <jonas.aberg@stericsson.com>
Reviewed-by: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
[Rebased to Linux 3.0-rc3, edit description]
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Change-Id: I4852e8975337dd07ed5d410ee9a79481a153e09c
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/34208
Reviewed-by: Linus WALLEIJ <linus.walleij@stericsson.com>
Tested-by: Linus WALLEIJ <linus.walleij@stericsson.com>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/spi/spi-pl022.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/spi/spi-pl022.c b/drivers/spi/spi-pl022.c index ac7c7270a33..48fa8b08167 100644 --- a/drivers/spi/spi-pl022.c +++ b/drivers/spi/spi-pl022.c @@ -40,6 +40,7 @@ #include <linux/dmaengine.h> #include <linux/dma-mapping.h> #include <linux/scatterlist.h> +#include <linux/pm_runtime.h> /* * This macro is used to define some register default values. @@ -517,6 +518,7 @@ static void giveback(struct pl022 *pl022) clk_disable(pl022->clk); amba_pclk_disable(pl022->adev); amba_vcore_disable(pl022->adev); + pm_runtime_put(&pl022->adev->dev); } /** @@ -1542,6 +1544,7 @@ static void pump_messages(struct work_struct *work) * and core will be disabled when giveback() is called in each method * (poll/interrupt/DMA) */ + pm_runtime_get_sync(&pl022->adev->dev); amba_vcore_enable(pl022->adev); amba_pclk_enable(pl022->adev); clk_enable(pl022->clk); @@ -2143,6 +2146,8 @@ pl022_probe(struct amba_device *adev, const struct amba_id *id) } printk(KERN_INFO "pl022: mapped registers from 0x%08x to %p\n", adev->res.start, pl022->virtbase); + pm_runtime_enable(dev); + pm_runtime_resume(dev); pl022->clk = clk_get(&adev->dev, NULL); if (IS_ERR(pl022->clk)) { @@ -2204,6 +2209,7 @@ pl022_probe(struct amba_device *adev, const struct amba_id *id) destroy_queue(pl022); pl022_dma_remove(pl022); free_irq(adev->irq[0], pl022); + pm_runtime_disable(&adev->dev); err_no_irq: clk_put(pl022->clk); err_no_clk: |
