[alsa-devel] [PATCH 4/7] ASoC: soc-pcm: goto error after trying for_each_rtd_codec_dai
Takashi Iwai
tiwai at suse.de
Tue Jan 28 08:01:37 CET 2020
On Mon, 27 Jan 2020 02:49:22 +0100,
Kuninori Morimoto wrote:
>
> From: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
>
> soc_pcm_open() might goto error process *during* for_each_rtd_codec_dai.
> In such case, fallback process need to care about operated/non-operated
> codec dai.
>
> But, if it goto error process *after* loop even though error happen
> during loop, it don't need to care about operated/non-operated.
> In such case code can be more simple.
> This patch do it. And this is prepare for soc_snd_open() cleanup
This would mean that snd_soc_dai_shutdown() is called even for the
stream that returned the error. This isn't the expected behavior.
Also, bit-OR-ing the multiple error codes isn't wise, they may return
different error codes, and you'll mixed up to a different number.
thanks,
Takashi
>
> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
> ---
> sound/soc/soc-pcm.c | 20 ++++++++------------
> 1 file changed, 8 insertions(+), 12 deletions(-)
>
> diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
> index f11c15f..57d2f00 100644
> --- a/sound/soc/soc-pcm.c
> +++ b/sound/soc/soc-pcm.c
> @@ -547,25 +547,24 @@ static int soc_pcm_open(struct snd_pcm_substream *substream)
> goto component_err;
>
> for_each_rtd_codec_dai(rtd, i, codec_dai) {
> - ret = snd_soc_dai_startup(codec_dai, substream);
> - if (ret < 0) {
> - dev_err(codec_dai->dev,
> - "ASoC: can't open codec %s: %d\n",
> - codec_dai->name, ret);
> - goto codec_dai_err;
> - }
> + ret |= snd_soc_dai_startup(codec_dai, substream);
>
> if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
> codec_dai->tx_mask = 0;
> else
> codec_dai->rx_mask = 0;
> }
> + if (ret < 0) {
> + dev_err(codec_dai->dev, "ASoC: can't open codec %s: %d\n",
> + codec_dai->name, ret);
> + goto codec_dai_err;
> + }
>
> ret = soc_rtd_startup(rtd, substream);
> if (ret < 0) {
> pr_err("ASoC: %s startup failed: %d\n",
> rtd->dai_link->name, ret);
> - goto machine_err;
> + goto codec_dai_err;
> }
>
> /* Dynamic PCM DAI links compat checks use dynamic capabilities */
> @@ -634,11 +633,8 @@ static int soc_pcm_open(struct snd_pcm_substream *substream)
> config_err:
> soc_rtd_shutdown(rtd, substream);
>
> -machine_err:
> - i = rtd->num_codecs;
> -
> codec_dai_err:
> - for_each_rtd_codec_dai_rollback(rtd, i, codec_dai)
> + for_each_rtd_codec_dai(rtd, i, codec_dai)
> snd_soc_dai_shutdown(codec_dai, substream);
>
> component_err:
> --
> 2.7.4
>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> https://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
More information about the Alsa-devel
mailing list