mmc: sh_mmcif: map DMA buffers on the DMA engine device
authorLinus Walleij <linus.walleij@linaro.org>
Thu, 10 Feb 2011 15:09:29 +0000 (16:09 +0100)
committerChris Ball <cjb@laptop.org>
Tue, 15 Mar 2011 17:49:09 +0000 (13:49 -0400)
As established for the MMCI, it is proper to map the DMA buffers
on the DMA engine which is the one actually performing the DMA.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Chris Ball <cjb@laptop.org>
drivers/mmc/host/sh_mmcif.c

index 12884c270171d2e81e5a87c2854e0005cdf085cb..8e4aba90d6a495ce55a6754fd88006baa6b27ccd 100644 (file)
@@ -194,10 +194,12 @@ static void mmcif_dma_complete(void *arg)
                return;
 
        if (host->data->flags & MMC_DATA_READ)
-               dma_unmap_sg(&host->pd->dev, host->data->sg, host->dma_sglen,
+               dma_unmap_sg(host->chan_rx->device->dev,
+                            host->data->sg, host->dma_sglen,
                             DMA_FROM_DEVICE);
        else
-               dma_unmap_sg(&host->pd->dev, host->data->sg, host->dma_sglen,
+               dma_unmap_sg(host->chan_tx->device->dev,
+                            host->data->sg, host->dma_sglen,
                             DMA_TO_DEVICE);
 
        complete(&host->dma_complete);
@@ -211,7 +213,8 @@ static void sh_mmcif_start_dma_rx(struct sh_mmcif_host *host)
        dma_cookie_t cookie = -EINVAL;
        int ret;
 
-       ret = dma_map_sg(&host->pd->dev, sg, host->data->sg_len, DMA_FROM_DEVICE);
+       ret = dma_map_sg(chan->device->dev, sg, host->data->sg_len,
+                        DMA_FROM_DEVICE);
        if (ret > 0) {
                host->dma_sglen = ret;
                desc = chan->device->device_prep_slave_sg(chan, sg, ret,
@@ -263,7 +266,8 @@ static void sh_mmcif_start_dma_tx(struct sh_mmcif_host *host)
        dma_cookie_t cookie = -EINVAL;
        int ret;
 
-       ret = dma_map_sg(&host->pd->dev, sg, host->data->sg_len, DMA_TO_DEVICE);
+       ret = dma_map_sg(chan->device->dev, sg, host->data->sg_len,
+                        DMA_TO_DEVICE);
        if (ret > 0) {
                host->dma_sglen = ret;
                desc = chan->device->device_prep_slave_sg(chan, sg, ret,