Whenever audio data equal to I2S-SP fifo watermark level is
produced/consumed, interrupt is generated.

Signed-off-by: Ravulapati Vishnu vardhan rao 
<vishnuvardhanrao.ravulap...@amd.com>
---
 sound/soc/amd/raven/acp3x-pcm-dma.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/sound/soc/amd/raven/acp3x-pcm-dma.c 
b/sound/soc/amd/raven/acp3x-pcm-dma.c
index 6fa892a..49f640f 100644
--- a/sound/soc/amd/raven/acp3x-pcm-dma.c
+++ b/sound/soc/amd/raven/acp3x-pcm-dma.c
@@ -176,6 +176,13 @@ static irqreturn_t i2s_irq_handler(int irq, void *dev_id)
                snd_pcm_period_elapsed(rv_i2s_data->play_stream);
                play_flag = 1;
        }
+       if ((val & BIT(I2S_TX_THRESHOLD)) &&
+                               rv_i2s_data->i2ssp_play_stream) {
+               rv_writel(BIT(I2S_TX_THRESHOLD),
+                       rv_i2s_data->acp3x_base + mmACP_EXTERNAL_INTR_STAT);
+               snd_pcm_period_elapsed(rv_i2s_data->i2ssp_play_stream);
+               play_flag = 1;
+       }
 
        if ((val & BIT(BT_RX_THRESHOLD)) && rv_i2s_data->capture_stream) {
                rv_writel(BIT(BT_RX_THRESHOLD), rv_i2s_data->acp3x_base +
@@ -183,6 +190,13 @@ static irqreturn_t i2s_irq_handler(int irq, void *dev_id)
                snd_pcm_period_elapsed(rv_i2s_data->capture_stream);
                cap_flag = 1;
        }
+       if ((val & BIT(I2S_RX_THRESHOLD)) &&
+                               rv_i2s_data->i2ssp_capture_stream) {
+               rv_writel(BIT(I2S_RX_THRESHOLD),
+                        rv_i2s_data->acp3x_base + mmACP_EXTERNAL_INTR_STAT);
+               snd_pcm_period_elapsed(rv_i2s_data->i2ssp_capture_stream);
+               cap_flag = 1;
+       }
 
        if (play_flag | cap_flag)
                return IRQ_HANDLED;
-- 
2.7.4

Reply via email to