From: Srinivas Kandagatla <srinivas.kandagatla@xxxxxxxxxx> commit 8f2e5c65ec7534cce6d315fccf2c3aef023f68f0 upstream. Its possible that the sound card is just opened and closed without actually playing stream, ex: if the audio file itself is missing. Even in such cases we do call stop on graphs that are not yet started. DSP can throw errors in such cases, so add a check to see if the graph was started before stopping it. Fixes: 9b4fe0f1cd79 ("ASoC: qdsp6: audioreach: add q6apm-dai support") Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@xxxxxxxxxx> Link: https://lore.kernel.org/r/20220126113549.8853-5-srinivas.kandagatla@xxxxxxxxxx Signed-off-by: Mark Brown <broonie@xxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- sound/soc/qcom/qdsp6/q6apm-dai.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) --- a/sound/soc/qcom/qdsp6/q6apm-dai.c +++ b/sound/soc/qcom/qdsp6/q6apm-dai.c @@ -308,8 +308,11 @@ static int q6apm_dai_close(struct snd_so struct snd_pcm_runtime *runtime = substream->runtime; struct q6apm_dai_rtd *prtd = runtime->private_data; - q6apm_graph_stop(prtd->graph); - q6apm_unmap_memory_regions(prtd->graph, substream->stream); + if (prtd->state) { /* only stop graph that is started */ + q6apm_graph_stop(prtd->graph); + q6apm_unmap_memory_regions(prtd->graph, substream->stream); + } + q6apm_graph_close(prtd->graph); prtd->graph = NULL; kfree(prtd); Patches currently in stable-queue which might be from srinivas.kandagatla@xxxxxxxxxx are queue-5.16/asoc-codecs-wcd938x-fix-return-value-of-mixer-put-function.patch queue-5.16/asoc-codecs-lpass-rx-macro-fix-sidetone-register-offsets.patch queue-5.16/asoc-qdsp6-q6apm-dai-only-stop-graphs-that-are-started.patch queue-5.16/asoc-codecs-wcd938x-fix-incorrect-used-of-portid.patch