ASoC: soc-pcm.c: indicate error if stream has no playback no capture
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Tue, 30 May 2023 00:49:43 +0000 (00:49 +0000)
committerMark Brown <broonie@kernel.org>
Wed, 31 May 2023 11:25:02 +0000 (12:25 +0100)
soc_get_playback_capture() (A) returns number of substreams for
playback/capture (B).
ASoC will probe the Sound Card and mapps CPU<->Codec pair.

(A) static int soc_get_playback_capture(...,
(B)     int *playback, int *capture)
{
...
if (rtd->dai_link->playback_only) {
*playback = 1;
*capture = 0;
}

if (rtd->dai_link->capture_only) {
*playback = 0;
*capture = 1;
}
(C)
return 0;
}

But it might be no playback no capture if it returns playback=0, capture=0.
It is very difficult to notice about it. This patch indicates error at (C)
then.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Reviewed-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/87y1l6zlqx.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/soc-pcm.c

index 6365ad8ca7ef071c9b0ea34e0c32051c29e6fcfa..f3ce825c0b201787b4f2103cc9cd517275723e2a 100644 (file)
@@ -2814,6 +2814,13 @@ static int soc_get_playback_capture(struct snd_soc_pcm_runtime *rtd,
                *capture = 1;
        }
 
+       if (!*playback && !*capture) {
+               dev_err(rtd->dev, "substream %s has no playback, no capture\n",
+                       rtd->dai_link->stream_name);
+
+               return -EINVAL;
+       }
+
        return 0;
 }