aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/dma/amba-pl08x.c
diff options
context:
space:
mode:
authorViresh Kumar <viresh.kumar@st.com>2011-08-05 06:02:33 -0400
committerVinod Koul <vinod.koul@intel.com>2011-08-25 10:03:38 -0400
commitb7b6018bad6fd7ebe5a78bda5f2a71a6ecf5406a (patch)
tree652c64fd26877df5f5257540aa257e0f64459b23 /drivers/dma/amba-pl08x.c
parent175a5e617cd820d9e22d9e4f6d3ef736b2f874b1 (diff)
dmaengine/amba-pl08x: 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: Viresh Kumar <viresh.kumar@st.com> Acked-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Diffstat (limited to 'drivers/dma/amba-pl08x.c')
-rw-r--r--drivers/dma/amba-pl08x.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/dma/amba-pl08x.c b/drivers/dma/amba-pl08x.c
index ead88c9a5e93..5dd97f450925 100644
--- a/drivers/dma/amba-pl08x.c
+++ b/drivers/dma/amba-pl08x.c
@@ -84,6 +84,7 @@
84#include <linux/init.h> 84#include <linux/init.h>
85#include <linux/interrupt.h> 85#include <linux/interrupt.h>
86#include <linux/module.h> 86#include <linux/module.h>
87#include <linux/pm_runtime.h>
87#include <linux/seq_file.h> 88#include <linux/seq_file.h>
88#include <linux/slab.h> 89#include <linux/slab.h>
89#include <asm/hardware/pl080.h> 90#include <asm/hardware/pl080.h>
@@ -405,6 +406,7 @@ pl08x_get_phy_channel(struct pl08x_driver_data *pl08x,
405 return NULL; 406 return NULL;
406 } 407 }
407 408
409 pm_runtime_get_sync(&pl08x->adev->dev);
408 return ch; 410 return ch;
409} 411}
410 412
@@ -418,6 +420,8 @@ static inline void pl08x_put_phy_channel(struct pl08x_driver_data *pl08x,
418 /* Stop the channel and clear its interrupts */ 420 /* Stop the channel and clear its interrupts */
419 pl08x_terminate_phy_chan(pl08x, ch); 421 pl08x_terminate_phy_chan(pl08x, ch);
420 422
423 pm_runtime_put(&pl08x->adev->dev);
424
421 /* Mark it as free */ 425 /* Mark it as free */
422 ch->serving = NULL; 426 ch->serving = NULL;
423 spin_unlock_irqrestore(&ch->lock, flags); 427 spin_unlock_irqrestore(&ch->lock, flags);
@@ -1855,6 +1859,9 @@ static int pl08x_probe(struct amba_device *adev, const struct amba_id *id)
1855 goto out_no_pl08x; 1859 goto out_no_pl08x;
1856 } 1860 }
1857 1861
1862 pm_runtime_set_active(&adev->dev);
1863 pm_runtime_enable(&adev->dev);
1864
1858 /* Initialize memcpy engine */ 1865 /* Initialize memcpy engine */
1859 dma_cap_set(DMA_MEMCPY, pl08x->memcpy.cap_mask); 1866 dma_cap_set(DMA_MEMCPY, pl08x->memcpy.cap_mask);
1860 pl08x->memcpy.dev = &adev->dev; 1867 pl08x->memcpy.dev = &adev->dev;
@@ -1992,6 +1999,8 @@ static int pl08x_probe(struct amba_device *adev, const struct amba_id *id)
1992 dev_info(&pl08x->adev->dev, "DMA: PL%03x rev%u at 0x%08llx irq %d\n", 1999 dev_info(&pl08x->adev->dev, "DMA: PL%03x rev%u at 0x%08llx irq %d\n",
1993 amba_part(adev), amba_rev(adev), 2000 amba_part(adev), amba_rev(adev),
1994 (unsigned long long)adev->res.start, adev->irq[0]); 2001 (unsigned long long)adev->res.start, adev->irq[0]);
2002
2003 pm_runtime_put(&adev->dev);
1995 return 0; 2004 return 0;
1996 2005
1997out_no_slave_reg: 2006out_no_slave_reg:
@@ -2010,6 +2019,9 @@ out_no_ioremap:
2010 dma_pool_destroy(pl08x->pool); 2019 dma_pool_destroy(pl08x->pool);
2011out_no_lli_pool: 2020out_no_lli_pool:
2012out_no_platdata: 2021out_no_platdata:
2022 pm_runtime_put(&adev->dev);
2023 pm_runtime_disable(&adev->dev);
2024
2013 kfree(pl08x); 2025 kfree(pl08x);
2014out_no_pl08x: 2026out_no_pl08x:
2015 amba_release_regions(adev); 2027 amba_release_regions(adev);