diff options
-rw-r--r-- | drivers/dma/omap-dma.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/drivers/dma/omap-dma.c b/drivers/dma/omap-dma.c index d1641aa9d113..06727a78e883 100644 --- a/drivers/dma/omap-dma.c +++ b/drivers/dma/omap-dma.c | |||
@@ -275,17 +275,21 @@ static void omap_dma_start_sg(struct omap_chan *c, struct omap_desc *d, | |||
275 | unsigned idx) | 275 | unsigned idx) |
276 | { | 276 | { |
277 | struct omap_sg *sg = d->sg + idx; | 277 | struct omap_sg *sg = d->sg + idx; |
278 | unsigned cxsa, cxei, cxfi; | ||
278 | 279 | ||
279 | if (d->dir == DMA_DEV_TO_MEM) { | 280 | if (d->dir == DMA_DEV_TO_MEM) { |
280 | c->plat->dma_write(sg->addr, CDSA, c->dma_ch); | 281 | cxsa = CDSA; |
281 | c->plat->dma_write(0, CDEI, c->dma_ch); | 282 | cxei = CDEI; |
282 | c->plat->dma_write(0, CDFI, c->dma_ch); | 283 | cxfi = CDFI; |
283 | } else { | 284 | } else { |
284 | c->plat->dma_write(sg->addr, CSSA, c->dma_ch); | 285 | cxsa = CSSA; |
285 | c->plat->dma_write(0, CSEI, c->dma_ch); | 286 | cxei = CSEI; |
286 | c->plat->dma_write(0, CSFI, c->dma_ch); | 287 | cxfi = CSFI; |
287 | } | 288 | } |
288 | 289 | ||
290 | c->plat->dma_write(sg->addr, cxsa, c->dma_ch); | ||
291 | c->plat->dma_write(0, cxei, c->dma_ch); | ||
292 | c->plat->dma_write(0, cxfi, c->dma_ch); | ||
289 | c->plat->dma_write(sg->en, CEN, c->dma_ch); | 293 | c->plat->dma_write(sg->en, CEN, c->dma_ch); |
290 | c->plat->dma_write(sg->fn, CFN, c->dma_ch); | 294 | c->plat->dma_write(sg->fn, CFN, c->dma_ch); |
291 | 295 | ||
@@ -296,6 +300,7 @@ static void omap_dma_start_desc(struct omap_chan *c) | |||
296 | { | 300 | { |
297 | struct virt_dma_desc *vd = vchan_next_desc(&c->vc); | 301 | struct virt_dma_desc *vd = vchan_next_desc(&c->vc); |
298 | struct omap_desc *d; | 302 | struct omap_desc *d; |
303 | unsigned cxsa, cxei, cxfi; | ||
299 | 304 | ||
300 | if (!vd) { | 305 | if (!vd) { |
301 | c->desc = NULL; | 306 | c->desc = NULL; |
@@ -312,15 +317,18 @@ static void omap_dma_start_desc(struct omap_chan *c) | |||
312 | c->plat->dma_write(d->ccr >> 16, CCR2, c->dma_ch); | 317 | c->plat->dma_write(d->ccr >> 16, CCR2, c->dma_ch); |
313 | 318 | ||
314 | if (d->dir == DMA_DEV_TO_MEM) { | 319 | if (d->dir == DMA_DEV_TO_MEM) { |
315 | c->plat->dma_write(d->dev_addr, CSSA, c->dma_ch); | 320 | cxsa = CSSA; |
316 | c->plat->dma_write(0, CSEI, c->dma_ch); | 321 | cxei = CSEI; |
317 | c->plat->dma_write(d->fi, CSFI, c->dma_ch); | 322 | cxfi = CSFI; |
318 | } else { | 323 | } else { |
319 | c->plat->dma_write(d->dev_addr, CDSA, c->dma_ch); | 324 | cxsa = CDSA; |
320 | c->plat->dma_write(0, CDEI, c->dma_ch); | 325 | cxei = CDEI; |
321 | c->plat->dma_write(d->fi, CDFI, c->dma_ch); | 326 | cxfi = CDFI; |
322 | } | 327 | } |
323 | 328 | ||
329 | c->plat->dma_write(d->dev_addr, cxsa, c->dma_ch); | ||
330 | c->plat->dma_write(0, cxei, c->dma_ch); | ||
331 | c->plat->dma_write(d->fi, cxfi, c->dma_ch); | ||
324 | c->plat->dma_write(d->csdp, CSDP, c->dma_ch); | 332 | c->plat->dma_write(d->csdp, CSDP, c->dma_ch); |
325 | 333 | ||
326 | omap_dma_start_sg(c, d, 0); | 334 | omap_dma_start_sg(c, d, 0); |