mmc: sh_mmcif: Fix DMA slave address configuration
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Tue, 15 Jul 2014 22:45:12 +0000 (00:45 +0200)
committerSimon Horman <horms@verge.net.au>
Fri, 5 Dec 2014 00:24:23 +0000 (09:24 +0900)
Commit e5a233cb647d749de2f188477c9a54b94d90477f ("mmc: sh_mmcif:
Factorize DMA channel request and configuration code") incorrectly
set the destination address for both slave channels instead of setting
the source address for the receive channel. Fix that.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
(cherry picked from commit d25006e7e5045e76575e9f58903efc1a860a3ff1)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
drivers/mmc/host/sh_mmcif.c

index 0289b4e..863d21e 100644 (file)
@@ -386,7 +386,7 @@ sh_mmcif_request_dma_one(struct sh_mmcif_host *host,
                         struct sh_mmcif_plat_data *pdata,
                         enum dma_transfer_direction direction)
 {
-       struct dma_slave_config cfg;
+       struct dma_slave_config cfg = { 0, };
        struct dma_chan *chan;
        unsigned int slave_id;
        struct resource *res;
@@ -417,8 +417,12 @@ sh_mmcif_request_dma_one(struct sh_mmcif_host *host,
        /* In the OF case the driver will get the slave ID from the DT */
        cfg.slave_id = slave_id;
        cfg.direction = direction;
-       cfg.dst_addr = res->start + MMCIF_CE_DATA;
-       cfg.src_addr = 0;
+
+       if (direction == DMA_DEV_TO_MEM)
+               cfg.src_addr = res->start + MMCIF_CE_DATA;
+       else
+               cfg.dst_addr = res->start + MMCIF_CE_DATA;
+
        ret = dmaengine_slave_config(chan, &cfg);
        if (ret < 0) {
                dma_release_channel(chan);