.. | .. |
---|
643 | 643 | chan = ccp->ccp_dma_chan + i; |
---|
644 | 644 | dma_chan = &chan->dma_chan; |
---|
645 | 645 | |
---|
646 | | - if (dma_chan->client_count) |
---|
647 | | - dma_release_channel(dma_chan); |
---|
648 | | - |
---|
649 | 646 | tasklet_kill(&chan->cleanup_tasklet); |
---|
650 | 647 | list_del_rcu(&dma_chan->device_node); |
---|
| 648 | + } |
---|
| 649 | +} |
---|
| 650 | + |
---|
| 651 | +static void ccp_dma_release_channels(struct ccp_device *ccp) |
---|
| 652 | +{ |
---|
| 653 | + struct ccp_dma_chan *chan; |
---|
| 654 | + struct dma_chan *dma_chan; |
---|
| 655 | + unsigned int i; |
---|
| 656 | + |
---|
| 657 | + for (i = 0; i < ccp->cmd_q_count; i++) { |
---|
| 658 | + chan = ccp->ccp_dma_chan + i; |
---|
| 659 | + dma_chan = &chan->dma_chan; |
---|
| 660 | + |
---|
| 661 | + if (dma_chan->client_count) |
---|
| 662 | + dma_release_channel(dma_chan); |
---|
651 | 663 | } |
---|
652 | 664 | } |
---|
653 | 665 | |
---|
.. | .. |
---|
771 | 783 | if (!dmaengine) |
---|
772 | 784 | return; |
---|
773 | 785 | |
---|
774 | | - ccp_dma_release(ccp); |
---|
| 786 | + ccp_dma_release_channels(ccp); |
---|
775 | 787 | dma_async_device_unregister(dma_dev); |
---|
| 788 | + ccp_dma_release(ccp); |
---|
776 | 789 | |
---|
777 | 790 | kmem_cache_destroy(ccp->dma_desc_cache); |
---|
778 | 791 | kmem_cache_destroy(ccp->dma_cmd_cache); |
---|