|
@@ -37,8 +37,8 @@
|
|
|
|
|
|
#define ATC_DEFAULT_CFG (ATC_FIFOCFG_HALFFIFO)
|
|
|
#define ATC_DEFAULT_CTRLA (0)
|
|
|
-#define ATC_DEFAULT_CTRLB (ATC_SIF(0) \
|
|
|
- |ATC_DIF(1))
|
|
|
+#define ATC_DEFAULT_CTRLB (ATC_SIF(AT_DMA_MEM_IF) \
|
|
|
+ |ATC_DIF(AT_DMA_MEM_IF))
|
|
|
|
|
|
/*
|
|
|
* Initial number of descriptors to allocate for each channel. This could
|
|
@@ -693,14 +693,15 @@ atc_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
|
|
|
reg_width = atslave->reg_width;
|
|
|
|
|
|
ctrla = ATC_DEFAULT_CTRLA | atslave->ctrla;
|
|
|
- ctrlb = ATC_DEFAULT_CTRLB | ATC_IEN;
|
|
|
+ ctrlb = ATC_IEN;
|
|
|
|
|
|
switch (direction) {
|
|
|
case DMA_TO_DEVICE:
|
|
|
ctrla |= ATC_DST_WIDTH(reg_width);
|
|
|
ctrlb |= ATC_DST_ADDR_MODE_FIXED
|
|
|
| ATC_SRC_ADDR_MODE_INCR
|
|
|
- | ATC_FC_MEM2PER;
|
|
|
+ | ATC_FC_MEM2PER
|
|
|
+ | ATC_SIF(AT_DMA_MEM_IF) | ATC_DIF(AT_DMA_PER_IF);
|
|
|
reg = atslave->tx_reg;
|
|
|
for_each_sg(sgl, sg, sg_len, i) {
|
|
|
struct at_desc *desc;
|
|
@@ -741,7 +742,8 @@ atc_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
|
|
|
ctrla |= ATC_SRC_WIDTH(reg_width);
|
|
|
ctrlb |= ATC_DST_ADDR_MODE_INCR
|
|
|
| ATC_SRC_ADDR_MODE_FIXED
|
|
|
- | ATC_FC_PER2MEM;
|
|
|
+ | ATC_FC_PER2MEM
|
|
|
+ | ATC_SIF(AT_DMA_PER_IF) | ATC_DIF(AT_DMA_MEM_IF);
|
|
|
|
|
|
reg = atslave->rx_reg;
|
|
|
for_each_sg(sgl, sg, sg_len, i) {
|
|
@@ -846,20 +848,22 @@ atc_dma_cyclic_fill_desc(struct at_dma_slave *atslave, struct at_desc *desc,
|
|
|
desc->lli.saddr = buf_addr + (period_len * period_index);
|
|
|
desc->lli.daddr = atslave->tx_reg;
|
|
|
desc->lli.ctrla = ctrla;
|
|
|
- desc->lli.ctrlb = ATC_DEFAULT_CTRLB
|
|
|
- | ATC_DST_ADDR_MODE_FIXED
|
|
|
+ desc->lli.ctrlb = ATC_DST_ADDR_MODE_FIXED
|
|
|
| ATC_SRC_ADDR_MODE_INCR
|
|
|
- | ATC_FC_MEM2PER;
|
|
|
+ | ATC_FC_MEM2PER
|
|
|
+ | ATC_SIF(AT_DMA_MEM_IF)
|
|
|
+ | ATC_DIF(AT_DMA_PER_IF);
|
|
|
break;
|
|
|
|
|
|
case DMA_FROM_DEVICE:
|
|
|
desc->lli.saddr = atslave->rx_reg;
|
|
|
desc->lli.daddr = buf_addr + (period_len * period_index);
|
|
|
desc->lli.ctrla = ctrla;
|
|
|
- desc->lli.ctrlb = ATC_DEFAULT_CTRLB
|
|
|
- | ATC_DST_ADDR_MODE_INCR
|
|
|
+ desc->lli.ctrlb = ATC_DST_ADDR_MODE_INCR
|
|
|
| ATC_SRC_ADDR_MODE_FIXED
|
|
|
- | ATC_FC_PER2MEM;
|
|
|
+ | ATC_FC_PER2MEM
|
|
|
+ | ATC_SIF(AT_DMA_PER_IF)
|
|
|
+ | ATC_DIF(AT_DMA_MEM_IF);
|
|
|
break;
|
|
|
|
|
|
default:
|