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@renesas.com
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
- snd_soc_dai_startup/shutdown()
- snd_soc_link_startup/shutdown()
- snd_soc_component_module_get/put()
- snd_soc_component_open/close()
- 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@renesas.com
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