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.