path: root/drivers/dma/dmaengine.c
diff options
authorSascha Hauer <>2010-09-30 13:56:32 +0000
committerDan Williams <>2010-10-05 15:49:26 -0700
commit782bc950d84e404422ba21008fd51ee894c8d231 (patch)
treec8a10b80bcc571c6de8a19c39b0f447ca61039d6 /drivers/dma/dmaengine.c
parentb30a3f6257ed2105259b404d419b4964e363928c (diff)
dmaengine: add possibility for cyclic transfers
Cyclic transfers are useful for audio where a single buffer divided in periods has to be transfered endlessly until stopped. After being prepared the transfer is started using the dma_async_descriptor->tx_submit function. dma_async_descriptor->callback is called after each period. The transfer is stopped using the DMA_TERMINATE_ALL callback. While being used for cyclic transfers the channel cannot be used for other transfer types. Signed-off-by: Sascha Hauer <> Cc: Haavard Skinnemoen <> Signed-off-by: Dan Williams <>
Diffstat (limited to 'drivers/dma/dmaengine.c')
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c
index 9d31d5eb95c1..e5e79ced4f4b 100644
--- a/drivers/dma/dmaengine.c
+++ b/drivers/dma/dmaengine.c
@@ -692,6 +692,8 @@ int dma_async_device_register(struct dma_device *device)
BUG_ON(dma_has_cap(DMA_SLAVE, device->cap_mask) &&
+ BUG_ON(dma_has_cap(DMA_CYCLIC, device->cap_mask) &&
+ !device->device_prep_dma_cyclic);
BUG_ON(dma_has_cap(DMA_SLAVE, device->cap_mask) &&