Hi Cezary > static int soc_pcm_open(struct snd_pcm_substream *substream) > { > > (...) > > /* startup the audio subsystem */ > for_each_rtd_dais(rtd, i, dai) { > ret = snd_soc_dai_startup(dai, substream); > if (ret < 0) { > dev_err(dai->dev, > "ASoC: can't open DAI %s: %d\n", > dai->name, ret); > goto config_err; > } > > if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) > dai->tx_mask = 0; > else > dai->rx_mask = 0; > } > > (...) > > config_err: > for_each_rtd_dais(rtd, i, dai) > snd_soc_dai_shutdown(dai, substream); > > - > > Let's assume we have 10 dais. In newer kernels, if > snd_soc_dai_startup() fails at i=5, error path will attempt to perform > snd_soc_dai_shutdown() for all dais (all 10) regardless if respective > dai was opened or not. This is a clear behavior change when compared > to v5.6 where cpu_dai was cleaned-up only if it was previously started > successfully. Due to usage of for_each_rtd_codec_dai_rollback macro, > the same applies to codec_dais. Oh, yes. We need _rollback() for it. I will try to fix it Thank you for your help !! Best regards --- Kuninori Morimoto