if (!c->cyclic) {
                c->cyclic = true;
                omap_dma_link_lch(c->dma_ch, c->dma_ch);
-               omap_enable_dma_irq(c->dma_ch, OMAP_DMA_FRAME_IRQ);
+
+               if (flags & DMA_PREP_INTERRUPT)
+                       omap_enable_dma_irq(c->dma_ch, OMAP_DMA_FRAME_IRQ);
+
                omap_disable_dma_irq(c->dma_ch, OMAP_DMA_BLOCK_IRQ);
        }
 
                omap_set_dma_dest_burst_mode(c->dma_ch, OMAP_DMA_DATA_BURST_16);
        }
 
-       return vchan_tx_prep(&c->vc, &d->vd, DMA_CTRL_ACK | DMA_PREP_INTERRUPT);
+       return vchan_tx_prep(&c->vc, &d->vd, flags);
 }
 
 static int omap_dma_slave_config(struct omap_chan *c, struct dma_slave_config *cfg)