| From 4febced15ac8ddb9cf3e603edb111842e4863d9a Mon Sep 17 00:00:00 2001 |
| From: Jerome Brunet <jbrunet@baylibre.com> |
| Date: Wed, 27 Jun 2018 17:36:38 +0200 |
| Subject: ASoC: dpcm: don't merge format from invalid codec dai |
| |
| From: Jerome Brunet <jbrunet@baylibre.com> |
| |
| commit 4febced15ac8ddb9cf3e603edb111842e4863d9a upstream. |
| |
| When merging codec formats, dpcm_runtime_base_format() should skip |
| the codecs which are not supporting the current stream direction. |
| |
| At the moment, if a BE link has more than one codec, and only one |
| of these codecs has no capture DAI, it becomes impossible to start |
| a capture stream because the merged format would be 0. |
| |
| Skipping invalid codec DAI solves the problem. |
| |
| Fixes: b073ed4e2126 ("ASoC: soc-pcm: DPCM cares BE format") |
| Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| sound/soc/soc-pcm.c | 8 ++++++++ |
| 1 file changed, 8 insertions(+) |
| |
| --- a/sound/soc/soc-pcm.c |
| +++ b/sound/soc/soc-pcm.c |
| @@ -1607,6 +1607,14 @@ static u64 dpcm_runtime_base_format(stru |
| int i; |
| |
| for (i = 0; i < be->num_codecs; i++) { |
| + /* |
| + * Skip CODECs which don't support the current stream |
| + * type. See soc_pcm_init_runtime_hw() for more details |
| + */ |
| + if (!snd_soc_dai_stream_valid(be->codec_dais[i], |
| + stream)) |
| + continue; |
| + |
| codec_dai_drv = be->codec_dais[i]->driver; |
| if (stream == SNDRV_PCM_STREAM_PLAYBACK) |
| codec_stream = &codec_dai_drv->playback; |