Hi Marek Thank you for testing. I will check it > On 28.09.2020 02:01, Kuninori Morimoto wrote: > > From: Kuninori Morimoto <kuninori.morimoto.gx@xxxxxxxxxxx> > > > > soc_pcm_open() does rollback when failed (A), > > but, it is almost same as soc_pcm_close(). > > > > static int soc_pcm_open(xxx) > > { > > ... > > if (ret < 0) > > goto xxx_err; > > ... > > return 0; > > > > ^ config_err: > > | ... > > | rtd_startup_err: > > (A) ... > > | component_err: > > | ... > > v return ret; > > } > > > > The difference is > > soc_pcm_close() is for all dai/component/substream, > > rollback is for succeeded part only. > > > > This kind of duplicated code can be a hotbed of bugs, > > thus, we want to share soc_pcm_close() and rollback. > > > > Now, soc_pcm_open/close() are handling > > 1) snd_soc_dai_startup/shutdown() > > 2) snd_soc_link_startup/shutdown() > > 3) snd_soc_component_module_get/put() > > 4) snd_soc_component_open/close() > > 5) pm_runtime_put/get() > > > > Now, 1) to 5) are handled. > > This patch adds new soc_pcm_clean() and call it from > > soc_pcm_open() as rollback, and from soc_pcm_close() as > > normal close handler. > > > > One note here is that it don't need to call snd_soc_runtime_deactivate() > > when rollback case, because it will be called without > > snd_soc_runtime_activate(). > > It also don't need to call snd_soc_dapm_stream_stop() when rollback case. > > > > Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@xxxxxxxxxxx> > > This patch landed in linux next-20200929 as commit 140a4532cdb8 ("ASoC: > soc-pcm: add soc_pcm_clean() and call it from soc_pcm_open/close()"). > Sadly it causes a regression in ALSA operation on my various test > boards: Exynos4412 based Trats2, Exynos5410 based Odroid XU, Exynos5250 > Snow Chromebook and other. The first app, which tries to open ALSA > device fails. Then, on the second try, it work. > > Here is a log from Odroid XU: > > [ 3.775032] max98090 1-0010: MAX98090 REVID=0x43 > [ 3.781958] max98090 1-0010: use default 2.8v micbias > [ 3.812813] ALSA device list: > [ 3.814448] #0: Odroid-XU > > # speaker-test -l1 > > speaker-test 1.1.3 > > Playback device is default > Stream parameters are 48000Hz, S16_LE, 1 channels > Using 16 octaves of pink noise > Playback open error: -22,Invalid argument > # speaker-test -l1 > > speaker-test 1.1.3 > > Playback device is default > Stream parameters are 48000Hz, S16_LE, 1 channels > Using 16 octaves of pink noise > Rate set to 48000Hz (requested 48000Hz) > Buffer size range from 128 to 131072 > Period size range from 64 to 65536 > Using max buffer size 131072 > Periods = 4 > was set period_size = 32768 > was set buffer_size = 131072 > 0 - Front Left > Time per period = 0.029512 > # > > > ... > > Best regards > -- > Marek Szyprowski, PhD > Samsung R&D Institute Poland >