ASoc / PCM recording-related regression between v5.4 and v5.5

Péter Ujfalusi peter.ujfalusi at gmail.com
Thu Apr 22 16:01:57 CEST 2021


Hi,

On 4/20/21 7:04 PM, Hin-Tak Leung wrote:
>  Hi,
> 
> I agree with Peter's change. Raspbian - the raspberry pi distribution - is currently shipping v5.10.x (jumping from v5.4.x in February), which has changed a lot since v5.5.x. Nonetheless, as a proof of concept, I reverted the idea of Peter's change in v.5.10.x, with this:
> 
> <diff-start>
> diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
> index 91bf33958..20077dd8c 100644
> --- a/sound/soc/soc-pcm.c
> +++ b/sound/soc/soc-pcm.c
> @@ -1042,7 +1042,7 @@ static int soc_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
>  case SNDRV_PCM_TRIGGER_START:
>  case SNDRV_PCM_TRIGGER_RESUME:
>  case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
> - ret = snd_soc_link_trigger(substream, cmd);
> + ret = snd_soc_pcm_dai_trigger(substream, cmd);
>  if (ret < 0)
>  break;
>  
> @@ -1050,8 +1050,9 @@ static int soc_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
>  if (ret < 0)
>  break;
>  
> - ret = snd_soc_pcm_dai_trigger(substream, cmd);
> + ret = snd_soc_link_trigger(substream, cmd);
>  break;
> +
>  case SNDRV_PCM_TRIGGER_STOP:
>  case SNDRV_PCM_TRIGGER_SUSPEND:
>  case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
> <diff-end>
> 
> and was able to restore the functionality of Seeed Studio's respeaker driver against v5.10.x. That it relies on the previous behavior is a bit broken. I think I'd like some dev_dbg() inside soc-pcm.c, and perhaps some help in modifying the out-of-tree audio device driver to cope?


If you start the DAI first and later the DMA then it works again?
I'm still behind of the patch which introduced different sequences for
start and stop.

>From my commit the start sequence is:
dai_link, DMA, CPU DAI then the codec

Is it make any difference if you try:
dai_link, DMA, codec then the CPU DAI

But the codec is usually not handled in trigger, it can not be atomic
most of the time.

Can you point me to the out of tree driver and the related dts files?
Can it be reproduced with rpbi w/o any hat? I have one hifiberry but
that is playback only and if I'm not mistaken the 3.5 on the board also?


> 
> Thanks a lot.
> 
> Regards,
> Hin-Tak 
> 
> On Tuesday, 20 April 2021, 15:19:58 BST, Hin-Tak Leung <htl10 at users.sourceforge.net> wrote:
> 
>> Hi Peter:
> 
>> I found the commit of a rather unusual regression between kernel v5.4 and v5.5, for an out-of-tree driver on the 
>> raspberrypi. Everything looks identical between v5.4 and 5.5, within accountable differences, even with debugging in > sound/ +p and the driver side. 5.4 records fine, 5.5 stucks on recording. The commit is one of yours:
> 
>> commit 4378f1fbe924054a09ff0d4e39e1a581b9245252
>> Author: Peter Ujfalusi <peter.ujfalusi at ti.com>
>> Date: Fri Sep 27 10:16:46 2019 +0300
> 
>> ASoC: soc-pcm: Use different sequence for start/stop trigger
> 
> ...
> 
>> The problem was initially at https://github.com/respeaker/seeed-voicecard/issues/290 
>> then over to https://github.com/raspberrypi/linux/issues/4279 and finally here. The "seeed-8mic-voicecard-
>> overlay.dts" is the dts corresponds to the problematic device ; The one with similar hardware but okay is "seeed-
>> 4mic-voicecard-overlay.dts" .
> 
> ...
>> The Raspberry Pi distribution raspbian jumped directly from 5.4.x to 5.10.x at the beginning of February. Considering 
>> the change has been in since the v5.5 merge window, I guess I'd like some help to correct / workaround on the 
>> out-of-tree driver side? And probably some new dev_err() message in the kernel for problematic driver helping to 
>> diagnose similar problems in the future would be nice. 
> 
>   
> 

-- 
Péter


More information about the Alsa-devel mailing list