]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ASoC: Intel: avs: Unprepare a stream when XRUN occurs
authorCezary Rojewski <cezary.rojewski@intel.com>
Thu, 23 Oct 2025 09:23:46 +0000 (11:23 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Nov 2025 20:36:40 +0000 (15:36 -0500)
[ Upstream commit cfca1637bc2b6b1e4f191d2f0b25f12402fbbb26 ]

The pcm->prepare() function may be called multiple times in a row by the
userspace, as mentioned in the documentation. The driver shall take that
into account and prevent redundancy. However, the exact same function is
called during XRUNs and in such case, the particular stream shall be
reset and setup anew.

Fixes: 9114700b496c ("ASoC: Intel: avs: Generic PCM FE operations")
Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
Link: https://patch.msgid.link/20251023092348.3119313-2-cezary.rojewski@intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
sound/soc/intel/avs/pcm.c

index 67ce6675eea755bed8ed4ab3b4134d5b846a3baa..0d7862910eeddfefbeaef092fbf5f59afbd2daa0 100644 (file)
@@ -754,6 +754,8 @@ static int avs_dai_fe_prepare(struct snd_pcm_substream *substream, struct snd_so
        data = snd_soc_dai_get_dma_data(dai, substream);
        host_stream = data->host_stream;
 
+       if (runtime->state == SNDRV_PCM_STATE_XRUN)
+               hdac_stream(host_stream)->prepared = false;
        if (hdac_stream(host_stream)->prepared)
                return 0;