diff options
| -rw-r--r-- | drivers/dma/stm32-dma.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/drivers/dma/stm32-dma.c b/drivers/dma/stm32-dma.c index 3688d0873a3e..a8c2ad686173 100644 --- a/drivers/dma/stm32-dma.c +++ b/drivers/dma/stm32-dma.c | |||
| @@ -421,7 +421,7 @@ static void stm32_dma_dump_reg(struct stm32_dma_chan *chan) | |||
| 421 | dev_dbg(chan2dev(chan), "SFCR: 0x%08x\n", sfcr); | 421 | dev_dbg(chan2dev(chan), "SFCR: 0x%08x\n", sfcr); |
| 422 | } | 422 | } |
| 423 | 423 | ||
| 424 | static int stm32_dma_start_transfer(struct stm32_dma_chan *chan) | 424 | static void stm32_dma_start_transfer(struct stm32_dma_chan *chan) |
| 425 | { | 425 | { |
| 426 | struct stm32_dma_device *dmadev = stm32_dma_get_dev(chan); | 426 | struct stm32_dma_device *dmadev = stm32_dma_get_dev(chan); |
| 427 | struct virt_dma_desc *vdesc; | 427 | struct virt_dma_desc *vdesc; |
| @@ -432,12 +432,12 @@ static int stm32_dma_start_transfer(struct stm32_dma_chan *chan) | |||
| 432 | 432 | ||
| 433 | ret = stm32_dma_disable_chan(chan); | 433 | ret = stm32_dma_disable_chan(chan); |
| 434 | if (ret < 0) | 434 | if (ret < 0) |
| 435 | return ret; | 435 | return; |
| 436 | 436 | ||
| 437 | if (!chan->desc) { | 437 | if (!chan->desc) { |
| 438 | vdesc = vchan_next_desc(&chan->vchan); | 438 | vdesc = vchan_next_desc(&chan->vchan); |
| 439 | if (!vdesc) | 439 | if (!vdesc) |
| 440 | return -EPERM; | 440 | return; |
| 441 | 441 | ||
| 442 | chan->desc = to_stm32_dma_desc(vdesc); | 442 | chan->desc = to_stm32_dma_desc(vdesc); |
| 443 | chan->next_sg = 0; | 443 | chan->next_sg = 0; |
| @@ -471,7 +471,7 @@ static int stm32_dma_start_transfer(struct stm32_dma_chan *chan) | |||
| 471 | 471 | ||
| 472 | chan->busy = true; | 472 | chan->busy = true; |
| 473 | 473 | ||
| 474 | return 0; | 474 | dev_dbg(chan2dev(chan), "vchan %p: started\n", &chan->vchan); |
| 475 | } | 475 | } |
| 476 | 476 | ||
| 477 | static void stm32_dma_configure_next_sg(struct stm32_dma_chan *chan) | 477 | static void stm32_dma_configure_next_sg(struct stm32_dma_chan *chan) |
| @@ -552,15 +552,13 @@ static void stm32_dma_issue_pending(struct dma_chan *c) | |||
| 552 | { | 552 | { |
| 553 | struct stm32_dma_chan *chan = to_stm32_dma_chan(c); | 553 | struct stm32_dma_chan *chan = to_stm32_dma_chan(c); |
| 554 | unsigned long flags; | 554 | unsigned long flags; |
| 555 | int ret; | ||
| 556 | 555 | ||
| 557 | spin_lock_irqsave(&chan->vchan.lock, flags); | 556 | spin_lock_irqsave(&chan->vchan.lock, flags); |
| 558 | if (!chan->busy) { | 557 | if (vchan_issue_pending(&chan->vchan) && !chan->desc && !chan->busy) { |
| 559 | if (vchan_issue_pending(&chan->vchan) && !chan->desc) { | 558 | dev_dbg(chan2dev(chan), "vchan %p: issued\n", &chan->vchan); |
| 560 | ret = stm32_dma_start_transfer(chan); | 559 | stm32_dma_start_transfer(chan); |
| 561 | if ((!ret) && (chan->desc->cyclic)) | 560 | if (chan->desc->cyclic) |
| 562 | stm32_dma_configure_next_sg(chan); | 561 | stm32_dma_configure_next_sg(chan); |
| 563 | } | ||
| 564 | } | 562 | } |
| 565 | spin_unlock_irqrestore(&chan->vchan.lock, flags); | 563 | spin_unlock_irqrestore(&chan->vchan.lock, flags); |
| 566 | } | 564 | } |
