Hi Takashi
I tested this patch-set. I noticed that it doesn't work if I used DPCM (Kernel has Oops). I will investigate it next week
Could you show the Oops message if you have? My concern is whether it happens by stopping at disconnect, or it's just another missing piece.
OK, but kernel log doesn't help you. see below
My environment now is I'm using DPCM. FE : rsnd FE : rsnd BE : ak4613
1st issue is that kernel need below patch. I guess BE is using dummy driver, and it doesn't have ops(?). If this is needed, I can post it.
----------------------- diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c index 2fec2fe..972408b 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c @@ -1241,7 +1241,8 @@ static int snd_pcm_do_stop(struct snd_pcm_substream *substream, int state) { if (substream->runtime->trigger_master == substream && snd_pcm_running(substream)) - substream->ops->trigger(substream, SNDRV_PCM_TRIGGER_STOP); + if (substream->ops && substream->ops->trigger) + substream->ops->trigger(substream, SNDRV_PCM_TRIGGER_STOP); return 0; /* unconditonally stop all substreams */ } -----------------------
After this patch, my driver side clock counter mismatch Oops happen. It seems this is because FE side wasn't called snd_pcm_stop(); (= BE side only called snd_pcm_stop()).
I could confirm this by printing who's stop was called by local quick hack.
Maybe timing reason, if kernel has Oops for some reasons, then, both BE/FE snd_pcm_stop() are called. If no Oops, BE snd_pcm_stop() only called.
Best regards --- Kuninori Morimoto