Re: [PATCH 5/7] ASoC: soc-pcm: add soc_pcm_clean() and call it from soc_pcm_open/close()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
> 



[Index of Archives]     [Linux SoC Development]     [Linux Rockchip Development]     [Linux for Synopsys ARC Processors]    
  • [Linux on Unisoc (RDA Micro) SoCs]     [Linux Actions SoC]     [Linux USB Development]     [Video for Linux]     [Linux Audio Users]     [Linux SCSI]     [Yosemite News]

  •   Powered by Linux