struct dma_chan *txchan = pl022->dma_tx_channel;
        struct dma_async_tx_descriptor *rxdesc;
        struct dma_async_tx_descriptor *txdesc;
-       dma_cookie_t cookie;
 
        /* Check that the channels are available */
        if (!rxchan || !txchan)
                tx_conf.dst_addr_width = rx_conf.src_addr_width;
        BUG_ON(rx_conf.src_addr_width != tx_conf.dst_addr_width);
 
-       rxchan->device->device_control(rxchan, DMA_SLAVE_CONFIG,
-                                      (unsigned long) &rx_conf);
-       txchan->device->device_control(txchan, DMA_SLAVE_CONFIG,
-                                      (unsigned long) &tx_conf);
+       dmaengine_slave_config(rxchan, &rx_conf);
+       dmaengine_slave_config(txchan, &tx_conf);
 
        /* Create sglists for the transfers */
        pages = (pl022->cur_transfer->len >> PAGE_SHIFT) + 1;
        rxdesc->callback_param = pl022;
 
        /* Submit and fire RX and TX with TX last so we're ready to read! */
-       cookie = rxdesc->tx_submit(rxdesc);
-       if (dma_submit_error(cookie))
-               goto err_submit_rx;
-       cookie = txdesc->tx_submit(txdesc);
-       if (dma_submit_error(cookie))
-               goto err_submit_tx;
-       rxchan->device->device_issue_pending(rxchan);
-       txchan->device->device_issue_pending(txchan);
+       dmaengine_submit(rxdesc);
+       dmaengine_submit(txdesc);
+       dma_async_issue_pending(rxchan);
+       dma_async_issue_pending(txchan);
 
        return 0;
 
 err_submit_tx:
 err_submit_rx:
 err_txdesc:
-       txchan->device->device_control(txchan, DMA_TERMINATE_ALL, 0);
+       dmaengine_terminate_all(txchan);
 err_rxdesc:
-       rxchan->device->device_control(rxchan, DMA_TERMINATE_ALL, 0);
+       dmaengine_terminate_all(rxchan);
        dma_unmap_sg(txchan->device->dev, pl022->sgt_tx.sgl,
                     pl022->sgt_tx.nents, DMA_TO_DEVICE);
 err_tx_sgmap:
        struct dma_chan *rxchan = pl022->dma_rx_channel;
        struct dma_chan *txchan = pl022->dma_tx_channel;
 
-       rxchan->device->device_control(rxchan, DMA_TERMINATE_ALL, 0);
-       txchan->device->device_control(txchan, DMA_TERMINATE_ALL, 0);
+       dmaengine_terminate_all(rxchan);
+       dmaengine_terminate_all(txchan);
        unmap_free_dma_scatter(pl022);
 }