aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/dma/dmaengine.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/dma/dmaengine.c')
-rw-r--r--drivers/dma/dmaengine.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c
index 3ddfd1f6c23c..4a4cce15f25d 100644
--- a/drivers/dma/dmaengine.c
+++ b/drivers/dma/dmaengine.c
@@ -267,6 +267,13 @@ static void dma_chan_put(struct dma_chan *chan)
267 /* This channel is not in use anymore, free it */ 267 /* This channel is not in use anymore, free it */
268 if (!chan->client_count && chan->device->device_free_chan_resources) 268 if (!chan->client_count && chan->device->device_free_chan_resources)
269 chan->device->device_free_chan_resources(chan); 269 chan->device->device_free_chan_resources(chan);
270
271 /* If the channel is used via a DMA request router, free the mapping */
272 if (chan->router && chan->router->route_free) {
273 chan->router->route_free(chan->router->dev, chan->route_data);
274 chan->router = NULL;
275 chan->route_data = NULL;
276 }
270} 277}
271 278
272enum dma_status dma_sync_wait(struct dma_chan *chan, dma_cookie_t cookie) 279enum dma_status dma_sync_wait(struct dma_chan *chan, dma_cookie_t cookie)
@@ -536,7 +543,7 @@ static struct dma_chan *private_candidate(const dma_cap_mask_t *mask,
536} 543}
537 544
538/** 545/**
539 * dma_request_slave_channel - try to get specific channel exclusively 546 * dma_get_slave_channel - try to get specific channel exclusively
540 * @chan: target channel 547 * @chan: target channel
541 */ 548 */
542struct dma_chan *dma_get_slave_channel(struct dma_chan *chan) 549struct dma_chan *dma_get_slave_channel(struct dma_chan *chan)
@@ -648,7 +655,7 @@ struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask,
648EXPORT_SYMBOL_GPL(__dma_request_channel); 655EXPORT_SYMBOL_GPL(__dma_request_channel);
649 656
650/** 657/**
651 * dma_request_slave_channel - try to allocate an exclusive slave channel 658 * dma_request_slave_channel_reason - try to allocate an exclusive slave channel
652 * @dev: pointer to client device structure 659 * @dev: pointer to client device structure
653 * @name: slave channel name 660 * @name: slave channel name
654 * 661 *
@@ -836,6 +843,8 @@ int dma_async_device_register(struct dma_device *device)
836 !device->device_prep_dma_pq); 843 !device->device_prep_dma_pq);
837 BUG_ON(dma_has_cap(DMA_PQ_VAL, device->cap_mask) && 844 BUG_ON(dma_has_cap(DMA_PQ_VAL, device->cap_mask) &&
838 !device->device_prep_dma_pq_val); 845 !device->device_prep_dma_pq_val);
846 BUG_ON(dma_has_cap(DMA_MEMSET, device->cap_mask) &&
847 !device->device_prep_dma_memset);
839 BUG_ON(dma_has_cap(DMA_INTERRUPT, device->cap_mask) && 848 BUG_ON(dma_has_cap(DMA_INTERRUPT, device->cap_mask) &&
840 !device->device_prep_dma_interrupt); 849 !device->device_prep_dma_interrupt);
841 BUG_ON(dma_has_cap(DMA_SG, device->cap_mask) && 850 BUG_ON(dma_has_cap(DMA_SG, device->cap_mask) &&