Pause/Resume can be used by the audio stack when the stream is paused/resumed
The edma platform code has support for this and the legacy audio stack used
this.

Signed-off-by: Peter Ujfalusi <peter.ujfal...@ti.com>
Acked-by: Joel Fernandes <jo...@ti.com>
---
 drivers/dma/edma.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/drivers/dma/edma.c b/drivers/dma/edma.c
index 2742867fd1e6..7891378a03f0 100644
--- a/drivers/dma/edma.c
+++ b/drivers/dma/edma.c
@@ -240,6 +240,26 @@ static int edma_slave_config(struct edma_chan *echan,
        return 0;
 }
 
+static int edma_dma_pause(struct edma_chan *echan)
+{
+       /* Pause/Resume only allowed with cyclic mode */
+       if (!echan->edesc->cyclic)
+               return -EINVAL;
+
+       edma_pause(echan->ch_num);
+       return 0;
+}
+
+static int edma_dma_resume(struct edma_chan *echan)
+{
+       /* Pause/Resume only allowed with cyclic mode */
+       if (!echan->edesc->cyclic)
+               return -EINVAL;
+
+       edma_resume(echan->ch_num);
+       return 0;
+}
+
 static int edma_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
                        unsigned long arg)
 {
@@ -255,6 +275,14 @@ static int edma_control(struct dma_chan *chan, enum 
dma_ctrl_cmd cmd,
                config = (struct dma_slave_config *)arg;
                ret = edma_slave_config(echan, config);
                break;
+       case DMA_PAUSE:
+               ret = edma_dma_pause(echan);
+               break;
+
+       case DMA_RESUME:
+               ret = edma_dma_resume(echan);
+               break;
+
        default:
                ret = -ENOSYS;
        }
-- 
1.9.2

_______________________________________________
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to