]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
ASoC: skip hw_free on codec dai for which the stream is invalid
authorJerome Brunet <jbrunet@baylibre.com>
Mon, 29 Apr 2019 09:47:50 +0000 (11:47 +0200)
committerMark Brown <broonie@kernel.org>
Fri, 3 May 2019 05:52:31 +0000 (14:52 +0900)
Like for hw_params, hw_free should not be called on codec dai for
which the current stream is invalid.

Fixes: cde79035c6cf ("ASoC: Handle multiple codecs with split playback / capture")
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/soc-pcm.c

index 57088bd69e5dc710ca64b6beabc4c3207499e55f..a810f6eeffee443133667ae81fcd23dfac15857a 100644 (file)
@@ -1031,6 +1031,9 @@ static int soc_pcm_hw_params(struct snd_pcm_substream *substream,
 
 codec_err:
        for_each_rtd_codec_dai_rollback(rtd, i, codec_dai) {
+               if (!snd_soc_dai_stream_valid(codec_dai, substream->stream))
+                       continue;
+
                if (codec_dai->driver->ops->hw_free)
                        codec_dai->driver->ops->hw_free(substream, codec_dai);
                codec_dai->rate = 0;
@@ -1088,6 +1091,9 @@ static int soc_pcm_hw_free(struct snd_pcm_substream *substream)
 
        /* now free hw params for the DAIs  */
        for_each_rtd_codec_dai(rtd, i, codec_dai) {
+               if (!snd_soc_dai_stream_valid(codec_dai, substream->stream))
+                       continue;
+
                if (codec_dai->driver->ops->hw_free)
                        codec_dai->driver->ops->hw_free(substream, codec_dai);
        }