[alsa-devel] [PATCH v2 0/2] Add snd_card_disconnect_sync() helper
Kuninori Morimoto
kuninori.morimoto.gx at renesas.com
Fri Oct 13 11:11:42 CEST 2017
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
More information about the Alsa-devel
mailing list