]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ASoC: qcom: q6apm-dai: reset queue ptr on trigger stop
authorSrinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Thu, 2 Apr 2026 08:11:10 +0000 (08:11 +0000)
committerMark Brown <broonie@kernel.org>
Thu, 2 Apr 2026 15:33:41 +0000 (16:33 +0100)
Reset queue pointer on SNDRV_PCM_TRIGGER_STOP event to be inline
with resetting appl_ptr. Without this we will end up with a queue_ptr
out of sync and driver could try to send data that is not ready yet.

Fix this by resetting the queue_ptr.

Fixes: 3d4a4411aa8bb ("ASoC: q6apm-dai: schedule all available frames to avoid dsp under-runs")
Cc: Stable@vger.kernel.org
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Link: https://patch.msgid.link/20260402081118.348071-6-srinivas.kandagatla@oss.qualcomm.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/qcom/qdsp6/q6apm-dai.c
sound/soc/qcom/qdsp6/q6apm.c

index 306e928e7b49b5afec2260241c6df75065da897e..292be457764f6fb82f9893875babb702da63a59d 100644 (file)
@@ -317,6 +317,7 @@ static int q6apm_dai_trigger(struct snd_soc_component *component,
        case SNDRV_PCM_TRIGGER_STOP:
                /* TODO support be handled via SoftPause Module */
                prtd->state = Q6APM_STREAM_STOPPED;
+               prtd->queue_ptr = 0;
                break;
        case SNDRV_PCM_TRIGGER_SUSPEND:
        case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
index 2dc525c8be42babc7f1a800ec431b3c21808637b..5751e80b3b9289b87d743617c758a92cb44f327b 100644 (file)
@@ -215,6 +215,8 @@ int q6apm_map_memory_regions(struct q6apm_graph *graph, unsigned int dir, phys_a
 
        mutex_lock(&graph->lock);
 
+       data->dsp_buf = 0;
+
        if (data->buf) {
                mutex_unlock(&graph->lock);
                return 0;