Am Mittwoch, 5. August 2015, 16:17:28 schrieb Shawn Lin: > DesignWare MMC Controller can supports two types of DMA > mode: external dma and internal dma. We get a RK312x platform > integrated dw_mmc and ARM pl330 dma controller. This patch add > edmac ops to support these platforms. I've tested it on RK312x > platform with edmac mode and RK3288 platform with idmac mode. > > Signed-off-by: Shawn Lin <shawn.lin@xxxxxxxxxxxxxx> > > --- [...] > diff --git a/include/linux/mmc/dw_mmc.h b/include/linux/mmc/dw_mmc.h > index 5be9767..6c1c7ea 100644 > --- a/include/linux/mmc/dw_mmc.h > +++ b/include/linux/mmc/dw_mmc.h > @@ -16,6 +16,7 @@ > > #include <linux/scatterlist.h> > #include <linux/mmc/core.h> > +#include <linux/dmaengine.h> > > #define MAX_MCI_SLOTS 2 > > @@ -40,6 +41,17 @@ enum { > > struct mmc_data; > > +enum { > + TRANS_MODE_PIO = 0, > + TRANS_MODE_IDMAC, > + TRANS_MODE_EDMAC > +}; > + > +struct dw_mci_dma_slave { > + struct dma_chan *ch; > + enum dma_transfer_direction direction; > +}; > + > /** > * struct dw_mci - MMC controller state shared between all slots > * @lock: Spinlock protecting the queue and associated data. > @@ -147,17 +159,23 @@ struct dw_mci { > > /* DMA interface members*/ > int use_dma; > + int trans_mode; you're introducing this new trans_mode, but we have "use_dma" already. So you could just define enum { TRANS_DMA_PIO = 0, TRANS_DMA_IDMAC, TRANS_DMA_EDMAC }; and fill use_dma appropriately. "0" is meaning PIO already, which I also did fix up some days ago in "[PATCH] mmc: dw_mmc: fix pio mode when internal dmac is enabled" [0]. Heiko [0] https://lkml.org/lkml/2015/8/3/407