aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/dma/mmp_pdma.c21
-rw-r--r--include/linux/dma/mmp-pdma.h15
2 files changed, 35 insertions, 1 deletions
diff --git a/drivers/dma/mmp_pdma.c b/drivers/dma/mmp_pdma.c
index eb75d4b4bafe..dd024d4759e7 100644
--- a/drivers/dma/mmp_pdma.c
+++ b/drivers/dma/mmp_pdma.c
@@ -19,6 +19,7 @@
19#include <linux/dmapool.h> 19#include <linux/dmapool.h>
20#include <linux/of_device.h> 20#include <linux/of_device.h>
21#include <linux/of.h> 21#include <linux/of.h>
22#include <linux/dma/mmp-pdma.h>
22 23
23#include "dmaengine.h" 24#include "dmaengine.h"
24 25
@@ -635,8 +636,13 @@ static int mmp_pdma_control(struct dma_chan *dchan, enum dma_ctrl_cmd cmd,
635 chan->dcmd |= DCMD_BURST32; 636 chan->dcmd |= DCMD_BURST32;
636 637
637 chan->dir = cfg->direction; 638 chan->dir = cfg->direction;
638 chan->drcmr = cfg->slave_id;
639 chan->dev_addr = addr; 639 chan->dev_addr = addr;
640 /* FIXME: drivers should be ported over to use the filter
641 * function. Once that's done, the following two lines can
642 * be removed.
643 */
644 if (cfg->slave_id)
645 chan->drcmr = cfg->slave_id;
640 break; 646 break;
641 default: 647 default:
642 return -ENOSYS; 648 return -ENOSYS;
@@ -877,6 +883,19 @@ static struct platform_driver mmp_pdma_driver = {
877 .remove = mmp_pdma_remove, 883 .remove = mmp_pdma_remove,
878}; 884};
879 885
886bool mmp_pdma_filter_fn(struct dma_chan *chan, void *param)
887{
888 struct mmp_pdma_chan *c = to_mmp_pdma_chan(chan);
889
890 if (chan->device->dev->driver != &mmp_pdma_driver.driver)
891 return false;
892
893 c->drcmr = *(unsigned int *) param;
894
895 return true;
896}
897EXPORT_SYMBOL_GPL(mmp_pdma_filter_fn);
898
880module_platform_driver(mmp_pdma_driver); 899module_platform_driver(mmp_pdma_driver);
881 900
882MODULE_DESCRIPTION("MARVELL MMP Periphera DMA Driver"); 901MODULE_DESCRIPTION("MARVELL MMP Periphera DMA Driver");
diff --git a/include/linux/dma/mmp-pdma.h b/include/linux/dma/mmp-pdma.h
new file mode 100644
index 000000000000..2dc9b2bc18fc
--- /dev/null
+++ b/include/linux/dma/mmp-pdma.h
@@ -0,0 +1,15 @@
1#ifndef _MMP_PDMA_H_
2#define _MMP_PDMA_H_
3
4struct dma_chan;
5
6#ifdef CONFIG_MMP_PDMA
7bool mmp_pdma_filter_fn(struct dma_chan *chan, void *param);
8#else
9static inline bool mmp_pdma_filter_fn(struct dma_chan *chan, void *param)
10{
11 return false;
12}
13#endif
14
15#endif /* _MMP_PDMA_H_ */