diff options
author | Sebastian Andrzej Siewior <bigeasy@linutronix.de> | 2013-08-20 20:35:53 +0400 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2013-08-27 23:19:52 +0400 |
commit | d6aafa2bf3bc1ca43405a4b753d91d7549224fdc (patch) | |
tree | a060e8d5bd5c875522ee1466a45621cfebfdfb7f /drivers/dma/cppi41.c | |
parent | 2ae847a1b10f3da5931fc9d04cc5950624418cf4 (diff) | |
download | linux-d6aafa2bf3bc1ca43405a4b753d91d7549224fdc.tar.xz |
dma: cpp41: enable pm_runtime during init
With enabled pm_runtime in the kernel the device won't work because it
is not "on" during the probe function. This patch enables the device via
pm_runtime on probe so it remains activated.
Acked-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/dma/cppi41.c')
-rw-r--r-- | drivers/dma/cppi41.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/dma/cppi41.c b/drivers/dma/cppi41.c index e69617889953..6c4e64f2f3e7 100644 --- a/drivers/dma/cppi41.c +++ b/drivers/dma/cppi41.c @@ -9,6 +9,7 @@ #include <linux/dmapool.h> #include <linux/interrupt.h> #include <linux/of_address.h> +#include <linux/pm_runtime.h> #include "dmaengine.h" #define DESC_TYPE 27 @@ -960,6 +961,11 @@ static int cppi41_dma_probe(struct platform_device *pdev) goto err_remap; } + pm_runtime_enable(&pdev->dev); + ret = pm_runtime_get_sync(&pdev->dev); + if (ret) + goto err_get_sync; + cdd->queues_rx = glue_info->queues_rx; cdd->queues_tx = glue_info->queues_tx; cdd->td_queue = glue_info->td_queue; @@ -1005,6 +1011,9 @@ err_irq: err_chans: deinit_cpii41(pdev, cdd); err_init_cppi: + pm_runtime_put(&pdev->dev); +err_get_sync: + pm_runtime_disable(&pdev->dev); iounmap(cdd->usbss_mem); iounmap(cdd->ctrl_mem); iounmap(cdd->sched_mem); @@ -1029,6 +1038,8 @@ static int cppi41_dma_remove(struct platform_device *pdev) iounmap(cdd->ctrl_mem); iounmap(cdd->sched_mem); iounmap(cdd->qmgr_mem); + pm_runtime_put(&pdev->dev); + pm_runtime_disable(&pdev->dev); kfree(cdd); return 0; } |