[PATCH 5/7] ASoC: soc-pcm: add soc_pcm_clean() and call it from soc_pcm_open/close()
Kuninori Morimoto
kuninori.morimoto.gx at renesas.com
Thu Oct 1 01:28:33 CEST 2020
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 at 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
> > 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 at 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
>
More information about the Alsa-devel
mailing list