mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
083be3f053
commit
bcda6ff8dd
|
@ -40,6 +40,7 @@
|
||||||
#include <linux/dmaengine.h>
|
#include <linux/dmaengine.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/scatterlist.h>
|
#include <linux/scatterlist.h>
|
||||||
|
#include <linux/pm_runtime.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This macro is used to define some register default values.
|
* This macro is used to define some register default values.
|
||||||
|
@ -517,6 +518,7 @@ static void giveback(struct pl022 *pl022)
|
||||||
clk_disable(pl022->clk);
|
clk_disable(pl022->clk);
|
||||||
amba_pclk_disable(pl022->adev);
|
amba_pclk_disable(pl022->adev);
|
||||||
amba_vcore_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
|
* and core will be disabled when giveback() is called in each method
|
||||||
* (poll/interrupt/DMA)
|
* (poll/interrupt/DMA)
|
||||||
*/
|
*/
|
||||||
|
pm_runtime_get_sync(&pl022->adev->dev);
|
||||||
amba_vcore_enable(pl022->adev);
|
amba_vcore_enable(pl022->adev);
|
||||||
amba_pclk_enable(pl022->adev);
|
amba_pclk_enable(pl022->adev);
|
||||||
clk_enable(pl022->clk);
|
clk_enable(pl022->clk);
|
||||||
|
@ -2142,6 +2145,8 @@ pl022_probe(struct amba_device *adev, const struct amba_id *id)
|
||||||
}
|
}
|
||||||
printk(KERN_INFO "pl022: mapped registers from 0x%08x to %p\n",
|
printk(KERN_INFO "pl022: mapped registers from 0x%08x to %p\n",
|
||||||
adev->res.start, pl022->virtbase);
|
adev->res.start, pl022->virtbase);
|
||||||
|
pm_runtime_enable(dev);
|
||||||
|
pm_runtime_resume(dev);
|
||||||
|
|
||||||
pl022->clk = clk_get(&adev->dev, NULL);
|
pl022->clk = clk_get(&adev->dev, NULL);
|
||||||
if (IS_ERR(pl022->clk)) {
|
if (IS_ERR(pl022->clk)) {
|
||||||
|
@ -2203,6 +2208,7 @@ pl022_probe(struct amba_device *adev, const struct amba_id *id)
|
||||||
destroy_queue(pl022);
|
destroy_queue(pl022);
|
||||||
pl022_dma_remove(pl022);
|
pl022_dma_remove(pl022);
|
||||||
free_irq(adev->irq[0], pl022);
|
free_irq(adev->irq[0], pl022);
|
||||||
|
pm_runtime_disable(&adev->dev);
|
||||||
err_no_irq:
|
err_no_irq:
|
||||||
clk_put(pl022->clk);
|
clk_put(pl022->clk);
|
||||||
err_no_clk:
|
err_no_clk:
|
||||||
|
|
Loading…
Reference in New Issue