diff options
Diffstat (limited to 'drivers/dma/dmaengine.c')
-rw-r--r-- | drivers/dma/dmaengine.c | 13 |
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 | ||
272 | enum dma_status dma_sync_wait(struct dma_chan *chan, dma_cookie_t cookie) | 279 | enum 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 | */ |
542 | struct dma_chan *dma_get_slave_channel(struct dma_chan *chan) | 549 | struct 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, | |||
648 | EXPORT_SYMBOL_GPL(__dma_request_channel); | 655 | EXPORT_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) && |