diff options
-rw-r--r-- | drivers/dma/mmp_pdma.c | 21 | ||||
-rw-r--r-- | include/linux/dma/mmp-pdma.h | 15 |
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 | ||
886 | bool 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 | } | ||
897 | EXPORT_SYMBOL_GPL(mmp_pdma_filter_fn); | ||
898 | |||
880 | module_platform_driver(mmp_pdma_driver); | 899 | module_platform_driver(mmp_pdma_driver); |
881 | 900 | ||
882 | MODULE_DESCRIPTION("MARVELL MMP Periphera DMA Driver"); | 901 | MODULE_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 | |||
4 | struct dma_chan; | ||
5 | |||
6 | #ifdef CONFIG_MMP_PDMA | ||
7 | bool mmp_pdma_filter_fn(struct dma_chan *chan, void *param); | ||
8 | #else | ||
9 | static 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_ */ | ||