On Thu, Dec 17, 2015 at 07:11:48PM +0100, Martin Sperl wrote: > + > + /* Setup addresses */ > + if (d->dir == DMA_DEV_TO_MEM) { > + control_block->info = BCM2835_DMA_D_INC | > + BCM2835_DMA_D_WIDTH | > + BCM2835_DMA_S_DREQ; > + control_block->src = dev_addr; > + control_block->dst = addr + (dma_addr_t)j; > + } else { > + control_block->info = BCM2835_DMA_S_INC | > + BCM2835_DMA_S_WIDTH | > + BCM2835_DMA_D_DREQ; > + control_block->src = addr + (dma_addr_t)j; > + control_block->dst = dev_addr; > + } > + > + /* Common part */ > + control_block->info |= > + BCM2835_DMA_WAITS(BCM2835_DMA_WAIT_CYCLES); > + control_block->info |= BCM2835_DMA_WAIT_RESP; > + > + /* Enable */ > + if (i == sg_len - 1 && len - j <= max_size) > + control_block->info |= BCM2835_DMA_INT_EN; > + > + /* Setup synchronization */ > + if (sync_type) > + control_block->info |= sync_type; > + > + /* Setup DREQ channel */ > + if (c->dreq) > + control_block->info |= > + BCM2835_DMA_PER_MAP(c->dreq); > + > + /* Length of a frame */ > + control_block->length = min(len - j, max_size); > + d->size += control_block->length; > + > + if (i < sg_len - 1 || len - j > max_size) { > + /* Next block is the next frame. */ > + control_block->next = > + d->control_block_base_phys + > + sizeof(struct bcm2835_dma_cb) * > + (i + split_cnt + 1); > + } else { > + /* Next block is empty. */ > + control_block->next = 0; > + } > + > + if (len - j > max_size) > + split_cnt++; Most of this part is common with the cyclic and seems copy paste. Can we use common routine to do common work please -- ~Vinod -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html