On Mon, 27 Jan 2020 02:49:22 +0100, Kuninori Morimoto wrote: > > From: Kuninori Morimoto <kuninori.morimoto.gx@xxxxxxxxxxx> > > 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@xxxxxxxxxxx> > --- > 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@xxxxxxxxxxxxxxxx > https://mailman.alsa-project.org/mailman/listinfo/alsa-devel > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx https://mailman.alsa-project.org/mailman/listinfo/alsa-devel