[alsa-devel] DPCM: skip DAPM_STREAM_STOP event to BE, if still used by other FE

Chuang Eric kaichiehc1325 at hotmail.com
Tue May 24 07:13:34 CEST 2016


Hi,

      Let me
illustrate the system first.

FE1 -----+----> BE

         |

FE2 -----+

 

      When there is
multi-FE stream to a single BE, the BE will receive SND_SOC_DAPM_STREAM_STOP if
one of the FE shutdown.

However, the BE is stilled used by another, this will let
BE cpu_dai and codec_dai think they are inactive. The later power check will go
wrong.

 

I have check the latest linux version, and didn't find
any related change.

The following is my change to address this, and will
re-send a formal patch if it's ok.

 

 

diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index 70e8088..9c2d159 100644

--- a/sound/soc/soc-pcm.c

+++ b/sound/soc/soc-pcm.c

@@ -163,6 +163,13 @@ int dpcm_dapm_stream_event(struct
snd_soc_pcm_runtime *fe, int dir,

            dev_dbg(be->dev, "ASoC: BE %s
event %d dir %d\n",

                        be->dai_link->name,
event, dir);

 

+           /* don't
sent stop event if this BE is used by other FE */

+           if
(event == SND_SOC_DAPM_STREAM_STOP &&

+               be->dpcm[dir].users >= 1) {

+                 pr_warn("kc,
%s(), be->dai_link->name %s skip stop event\n",

__func__, be->dai_link->name);

+                 continue;

+           }

+

            snd_soc_dapm_stream_event(be, dir,
event);

      }

 

 

Sincerely,

Kai Chieh 		 	   		  


More information about the Alsa-devel mailing list