aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/dma
diff options
context:
space:
mode:
authorVinod Koul <vinod.koul@intel.com>2013-09-02 08:10:40 -0400
committerVinod Koul <vinod.koul@intel.com>2013-09-02 08:10:40 -0400
commit355cdafe14d72c616dc804a756f3af4f4df4fe8c (patch)
tree592ef60b65da9a539daa84f5d1cf52cf483b362b /drivers/dma
parent4770ee44359ad454992d544cf14f8d330a93f5ca (diff)
parentca38ff133eb85b64e62b508a7726ea0247edd359 (diff)
Merge branch 'topic/api_caps' into for-linus
Diffstat (limited to 'drivers/dma')
-rw-r--r--drivers/dma/pl330.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
index cfd2d703fcb5..36ed30116ee0 100644
--- a/drivers/dma/pl330.c
+++ b/drivers/dma/pl330.c
@@ -2870,6 +2870,32 @@ static irqreturn_t pl330_irq_handler(int irq, void *data)
2870 return IRQ_NONE; 2870 return IRQ_NONE;
2871} 2871}
2872 2872
2873#define PL330_DMA_BUSWIDTHS \
2874 BIT(DMA_SLAVE_BUSWIDTH_UNDEFINED) | \
2875 BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) | \
2876 BIT(DMA_SLAVE_BUSWIDTH_2_BYTES) | \
2877 BIT(DMA_SLAVE_BUSWIDTH_4_BYTES) | \
2878 BIT(DMA_SLAVE_BUSWIDTH_8_BYTES)
2879
2880static int pl330_dma_device_slave_caps(struct dma_chan *dchan,
2881 struct dma_slave_caps *caps)
2882{
2883 caps->src_addr_widths = PL330_DMA_BUSWIDTHS;
2884 caps->dstn_addr_widths = PL330_DMA_BUSWIDTHS;
2885 caps->directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV);
2886 caps->cmd_pause = false;
2887 caps->cmd_terminate = true;
2888
2889 /*
2890 * This is the limit for transfers with a buswidth of 1, larger
2891 * buswidths will have larger limits.
2892 */
2893 caps->max_sg_len = 1900800;
2894 caps->max_sg_nr = 0;
2895
2896 return 0;
2897}
2898
2873static int 2899static int
2874pl330_probe(struct amba_device *adev, const struct amba_id *id) 2900pl330_probe(struct amba_device *adev, const struct amba_id *id)
2875{ 2901{
@@ -2975,6 +3001,7 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id)
2975 pd->device_prep_slave_sg = pl330_prep_slave_sg; 3001 pd->device_prep_slave_sg = pl330_prep_slave_sg;
2976 pd->device_control = pl330_control; 3002 pd->device_control = pl330_control;
2977 pd->device_issue_pending = pl330_issue_pending; 3003 pd->device_issue_pending = pl330_issue_pending;
3004 pd->device_slave_caps = pl330_dma_device_slave_caps;
2978 3005
2979 ret = dma_async_device_register(pd); 3006 ret = dma_async_device_register(pd);
2980 if (ret) { 3007 if (ret) {