Hi 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