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@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@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.