|
@@ -473,15 +473,11 @@ atc_chain_complete(struct at_dma_chan *atchan, struct at_desc *desc)
|
|
/* for cyclic transfers,
|
|
/* for cyclic transfers,
|
|
* no need to replay callback function while stopping */
|
|
* no need to replay callback function while stopping */
|
|
if (!atc_chan_is_cyclic(atchan)) {
|
|
if (!atc_chan_is_cyclic(atchan)) {
|
|
- dma_async_tx_callback callback = txd->callback;
|
|
|
|
- void *param = txd->callback_param;
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* The API requires that no submissions are done from a
|
|
* The API requires that no submissions are done from a
|
|
* callback, so we don't need to drop the lock here
|
|
* callback, so we don't need to drop the lock here
|
|
*/
|
|
*/
|
|
- if (callback)
|
|
|
|
- callback(param);
|
|
|
|
|
|
+ dmaengine_desc_get_callback_invoke(txd, NULL);
|
|
}
|
|
}
|
|
|
|
|
|
dma_run_dependencies(txd);
|
|
dma_run_dependencies(txd);
|
|
@@ -598,15 +594,12 @@ static void atc_handle_cyclic(struct at_dma_chan *atchan)
|
|
{
|
|
{
|
|
struct at_desc *first = atc_first_active(atchan);
|
|
struct at_desc *first = atc_first_active(atchan);
|
|
struct dma_async_tx_descriptor *txd = &first->txd;
|
|
struct dma_async_tx_descriptor *txd = &first->txd;
|
|
- dma_async_tx_callback callback = txd->callback;
|
|
|
|
- void *param = txd->callback_param;
|
|
|
|
|
|
|
|
dev_vdbg(chan2dev(&atchan->chan_common),
|
|
dev_vdbg(chan2dev(&atchan->chan_common),
|
|
"new cyclic period llp 0x%08x\n",
|
|
"new cyclic period llp 0x%08x\n",
|
|
channel_readl(atchan, DSCR));
|
|
channel_readl(atchan, DSCR));
|
|
|
|
|
|
- if (callback)
|
|
|
|
- callback(param);
|
|
|
|
|
|
+ dmaengine_desc_get_callback_invoke(txd, NULL);
|
|
}
|
|
}
|
|
|
|
|
|
/*-- IRQ & Tasklet ---------------------------------------------------*/
|
|
/*-- IRQ & Tasklet ---------------------------------------------------*/
|