And remove a magic number in the process.

Signed-off-by: Ian Campbell <i...@hellion.org.uk>
---
 arch/arm/include/asm/arch-sunxi/mmc.h |  1 +
 drivers/mmc/sunxi_mmc.c               | 18 ++++++++++++++----
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/arch/arm/include/asm/arch-sunxi/mmc.h 
b/arch/arm/include/asm/arch-sunxi/mmc.h
index 1c19f85..6385bc9 100644
--- a/arch/arm/include/asm/arch-sunxi/mmc.h
+++ b/arch/arm/include/asm/arch-sunxi/mmc.h
@@ -57,6 +57,7 @@ struct sunxi_mmc {
                                         SUNXI_MMC_GCTRL_FIFO_RESET|\
                                         SUNXI_MMC_GCTRL_DMA_RESET)
 #define SUNXI_MMC_GCTRL_DMA_ENABLE     (0x1 << 5)
+#define SUNXI_MMC_GCTRL_ACCESS_BY_AHB   (0x1 << 31)
 
 #define SUNXI_MMC_CMD_RESP_EXPIRE      (0x1 << 6)
 #define SUNXI_MMC_CMD_LONG_RESPONSE    (0x1 << 7)
diff --git a/drivers/mmc/sunxi_mmc.c b/drivers/mmc/sunxi_mmc.c
index d2a82bf..d520599 100644
--- a/drivers/mmc/sunxi_mmc.c
+++ b/drivers/mmc/sunxi_mmc.c
@@ -419,6 +419,18 @@ static int mmc_trans_data_by_dma(struct mmc *mmc, struct 
mmc_data *data)
        return 0;
 }
 
+static void mmc_enable_dma_accesses(struct mmc *mmc, int dma)
+{
+       struct sunxi_mmc_host *mmchost = (struct sunxi_mmc_host *)mmc->priv;
+
+       unsigned int gctrl = readl(&mmchost->reg->gctrl);
+       if (dma)
+               gctrl &= ~SUNXI_MMC_GCTRL_ACCESS_BY_AHB;
+       else
+               gctrl |= SUNXI_MMC_GCTRL_ACCESS_BY_AHB;
+       writel(gctrl, &mmchost->reg->gctrl);
+}
+
 static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
                        struct mmc_data *data)
 {
@@ -484,13 +496,11 @@ static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd 
*cmd,
                if (0) {
 #endif
                        usedma = 1;
-                       writel(readl(&mmchost->reg->gctrl) & ~(0x1 << 31),
-                              &mmchost->reg->gctrl);
+                       mmc_enable_dma_accesses(mmc, 1);
                        ret = mmc_trans_data_by_dma(mmc, data);
                        writel(cmdval | cmd->cmdidx, &mmchost->reg->cmd);
                } else {
-                       writel(readl(&mmchost->reg->gctrl) | 0x1 << 31,
-                              &mmchost->reg->gctrl);
+                       mmc_enable_dma_accesses(mmc, 0);
                        writel(cmdval | cmd->cmdidx, &mmchost->reg->cmd);
                        ret = mmc_trans_data_by_cpu(mmc, data);
                }
-- 
1.8.5.3

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to linux-sunxi+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to