aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/dma/pl330.c
diff options
context:
space:
mode:
authorThomas Abraham <thomas.abraham@linaro.org>2011-10-24 05:43:02 -0400
committerKukjin Kim <kgene.kim@samsung.com>2011-12-22 20:07:02 -0500
commit3e2ec13a8185183cd7ff237dadc948a0f9f7398f (patch)
treefa5efc91ccbb6fe013c2614ac9b676c4192b6f60 /drivers/dma/pl330.c
parenta169a888bf8c5490ae0377fcd0ad22c6af9fd8e7 (diff)
DMA: PL330: move filter function into driver
The dma channel selection filter function is moved from plat-samsung into the pl330 driver. In additon to that, a check is added in the filter function to ensure that the channel on which the filter has been invoked is pl330 channel instance (and avoid any incorrect access of chan->private in a system with multiple types of DMA drivers). Suggested-by: Russell King <rmk+kernel@arm.linux.org.uk> Signed-off-by: Thomas Abraham <thomas.abraham@linaro.org> Acked-by: Jassi Brar <jassisinghbrar@gmail.com> Acked-by: Grant Likely <grant.likely@secretlab.ca> Acked-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
Diffstat (limited to 'drivers/dma/pl330.c')
-rw-r--r--drivers/dma/pl330.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
index 571041477ab2..0c434dca4bf2 100644
--- a/drivers/dma/pl330.c
+++ b/drivers/dma/pl330.c
@@ -116,6 +116,9 @@ struct dma_pl330_desc {
116 struct dma_pl330_chan *pchan; 116 struct dma_pl330_chan *pchan;
117}; 117};
118 118
119/* forward declaration */
120static struct amba_driver pl330_driver;
121
119static inline struct dma_pl330_chan * 122static inline struct dma_pl330_chan *
120to_pchan(struct dma_chan *ch) 123to_pchan(struct dma_chan *ch)
121{ 124{
@@ -267,6 +270,18 @@ static void dma_pl330_rqcb(void *token, enum pl330_op_err err)
267 tasklet_schedule(&pch->task); 270 tasklet_schedule(&pch->task);
268} 271}
269 272
273bool pl330_filter(struct dma_chan *chan, void *param)
274{
275 struct dma_pl330_peri *peri;
276
277 if (chan->device->dev->driver != &pl330_driver.drv)
278 return false;
279
280 peri = chan->private;
281 return peri->peri_id == (unsigned)param;
282}
283EXPORT_SYMBOL(pl330_filter);
284
270static int pl330_alloc_chan_resources(struct dma_chan *chan) 285static int pl330_alloc_chan_resources(struct dma_chan *chan)
271{ 286{
272 struct dma_pl330_chan *pch = to_pchan(chan); 287 struct dma_pl330_chan *pch = to_pchan(chan);