@ -640,6 +640,25 @@ bool sirfsoc_dma_filter_id(struct dma_chan *chan, void *chan_id)
}
EXPORT_SYMBOL ( sirfsoc_dma_filter_id ) ;
# define SIRFSOC_DMA_BUSWIDTHS \
( BIT ( DMA_SLAVE_BUSWIDTH_UNDEFINED ) | \
BIT ( DMA_SLAVE_BUSWIDTH_1_BYTE ) | \
BIT ( DMA_SLAVE_BUSWIDTH_2_BYTES ) | \
BIT ( DMA_SLAVE_BUSWIDTH_4_BYTES ) | \
BIT ( DMA_SLAVE_BUSWIDTH_8_BYTES ) )
static int sirfsoc_dma_device_slave_caps ( struct dma_chan * dchan ,
struct dma_slave_caps * caps )
{
caps - > src_addr_widths = SIRFSOC_DMA_BUSWIDTHS ;
caps - > dstn_addr_widths = SIRFSOC_DMA_BUSWIDTHS ;
caps - > directions = BIT ( DMA_DEV_TO_MEM ) | BIT ( DMA_MEM_TO_DEV ) ;
caps - > cmd_pause = true ;
caps - > cmd_terminate = true ;
return 0 ;
}
static int sirfsoc_dma_probe ( struct platform_device * op )
{
struct device_node * dn = op - > dev . of_node ;
@ -712,6 +731,7 @@ static int sirfsoc_dma_probe(struct platform_device *op)
dma - > device_tx_status = sirfsoc_dma_tx_status ;
dma - > device_prep_interleaved_dma = sirfsoc_dma_prep_interleaved ;
dma - > device_prep_dma_cyclic = sirfsoc_dma_prep_cyclic ;
dma - > device_slave_caps = sirfsoc_dma_device_slave_caps ;
INIT_LIST_HEAD ( & dma - > channels ) ;
dma_cap_set ( DMA_SLAVE , dma - > cap_mask ) ;