Message ID | 1526985623-2606-4-git-send-email-shreyas.nc@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 05/22/2018 05:40 AM, Shreyas NC wrote: > DAPM handles DAIs during soc_dapm_stream_event() and during addition > and creation of DAI widgets i.e., dapm_add_valid_dai_widget() and > dapm_connect_dai_link_widgets(). > > Extend these functions to handle multiple cpu dai. nit-pick: the diffs are difficult to look at, it might be easier on the reader if you first added a new helper function, then added multi cpu_dais in a second patch. Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> > > Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com> > Signed-off-by: Vinod Koul <vkoul@kernel.org> > Signed-off-by: Shreyas NC <shreyas.nc@intel.com> > --- > sound/soc/soc-dapm.c | 71 ++++++++++++++++++++++++++++++++++------------------ > 1 file changed, 46 insertions(+), 25 deletions(-) > > diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c > index 2d97091..79f5f61 100644 > --- a/sound/soc/soc-dapm.c > +++ b/sound/soc/soc-dapm.c > @@ -4108,38 +4108,57 @@ int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card) > return 0; > } > > -static void dapm_connect_dai_link_widgets(struct snd_soc_card *card, > - struct snd_soc_pcm_runtime *rtd) > +static void dapm_add_valid_dai_widget(struct snd_soc_card *card, > + struct snd_soc_pcm_runtime *rtd, > + struct snd_soc_dai *codec_dai, > + struct snd_soc_dai *cpu_dai) > { > - struct snd_soc_dai *cpu_dai = rtd->cpu_dai; > struct snd_soc_dapm_widget *sink, *source; > - int i; > > - for (i = 0; i < rtd->num_codecs; i++) { > - struct snd_soc_dai *codec_dai = rtd->codec_dais[i]; > + /* connect BE DAI playback if widgets are valid */ > + if (codec_dai->playback_widget && cpu_dai->playback_widget) { > + source = cpu_dai->playback_widget; > + sink = codec_dai->playback_widget; > + dev_err(rtd->dev, "connected DAI link %s:%s -> %s:%s\n", > + cpu_dai->component->name, > + source->name, > + codec_dai->component->name, > + sink->name); > + > + snd_soc_dapm_add_path(&card->dapm, source, sink, > + NULL, NULL); > + } > > - /* connect BE DAI playback if widgets are valid */ > - if (codec_dai->playback_widget && cpu_dai->playback_widget) { > - source = cpu_dai->playback_widget; > - sink = codec_dai->playback_widget; > - dev_dbg(rtd->dev, "connected DAI link %s:%s -> %s:%s\n", > - cpu_dai->component->name, source->name, > - codec_dai->component->name, sink->name); > + /* connect BE DAI capture if widgets are valid */ > + if (codec_dai->capture_widget && cpu_dai->capture_widget) { > + source = codec_dai->capture_widget; > + sink = cpu_dai->capture_widget; > + dev_err(rtd->dev, "connected DAI link %s:%s -> %s:%s\n", > + codec_dai->component->name, > + source->name, > + cpu_dai->component->name, > + sink->name); > > - snd_soc_dapm_add_path(&card->dapm, source, sink, > + snd_soc_dapm_add_path(&card->dapm, source, sink, > NULL, NULL); > - } > + } > + > +} > > - /* connect BE DAI capture if widgets are valid */ > - if (codec_dai->capture_widget && cpu_dai->capture_widget) { > - source = codec_dai->capture_widget; > - sink = cpu_dai->capture_widget; > - dev_dbg(rtd->dev, "connected DAI link %s:%s -> %s:%s\n", > - codec_dai->component->name, source->name, > - cpu_dai->component->name, sink->name); > +static void dapm_connect_dai_link_widgets(struct snd_soc_card *card, > + struct snd_soc_pcm_runtime *rtd) > +{ > + struct snd_soc_dai *cpu_dai; > + int i, j; > > - snd_soc_dapm_add_path(&card->dapm, source, sink, > - NULL, NULL); > + for (i = 0; i < rtd->num_codecs; i++) { > + struct snd_soc_dai *codec_dai = rtd->codec_dais[i]; > + > + for (j = 0; j < rtd->num_cpu_dai; j++) { > + cpu_dai = rtd->cpu_dais[j]; > + > + dapm_add_valid_dai_widget(card, rtd, > + codec_dai, cpu_dai); > } > } > } > @@ -4206,7 +4225,9 @@ static void soc_dapm_stream_event(struct snd_soc_pcm_runtime *rtd, int stream, > { > int i; > > - soc_dapm_dai_stream_event(rtd->cpu_dai, stream, event); > + for (i = 0; i < rtd->num_cpu_dai; i++) > + soc_dapm_dai_stream_event(rtd->cpu_dais[i], stream, event); > + > for (i = 0; i < rtd->num_codecs; i++) > soc_dapm_dai_stream_event(rtd->codec_dais[i], stream, event); >
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index 2d97091..79f5f61 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -4108,38 +4108,57 @@ int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card) return 0; } -static void dapm_connect_dai_link_widgets(struct snd_soc_card *card, - struct snd_soc_pcm_runtime *rtd) +static void dapm_add_valid_dai_widget(struct snd_soc_card *card, + struct snd_soc_pcm_runtime *rtd, + struct snd_soc_dai *codec_dai, + struct snd_soc_dai *cpu_dai) { - struct snd_soc_dai *cpu_dai = rtd->cpu_dai; struct snd_soc_dapm_widget *sink, *source; - int i; - for (i = 0; i < rtd->num_codecs; i++) { - struct snd_soc_dai *codec_dai = rtd->codec_dais[i]; + /* connect BE DAI playback if widgets are valid */ + if (codec_dai->playback_widget && cpu_dai->playback_widget) { + source = cpu_dai->playback_widget; + sink = codec_dai->playback_widget; + dev_err(rtd->dev, "connected DAI link %s:%s -> %s:%s\n", + cpu_dai->component->name, + source->name, + codec_dai->component->name, + sink->name); + + snd_soc_dapm_add_path(&card->dapm, source, sink, + NULL, NULL); + } - /* connect BE DAI playback if widgets are valid */ - if (codec_dai->playback_widget && cpu_dai->playback_widget) { - source = cpu_dai->playback_widget; - sink = codec_dai->playback_widget; - dev_dbg(rtd->dev, "connected DAI link %s:%s -> %s:%s\n", - cpu_dai->component->name, source->name, - codec_dai->component->name, sink->name); + /* connect BE DAI capture if widgets are valid */ + if (codec_dai->capture_widget && cpu_dai->capture_widget) { + source = codec_dai->capture_widget; + sink = cpu_dai->capture_widget; + dev_err(rtd->dev, "connected DAI link %s:%s -> %s:%s\n", + codec_dai->component->name, + source->name, + cpu_dai->component->name, + sink->name); - snd_soc_dapm_add_path(&card->dapm, source, sink, + snd_soc_dapm_add_path(&card->dapm, source, sink, NULL, NULL); - } + } + +} - /* connect BE DAI capture if widgets are valid */ - if (codec_dai->capture_widget && cpu_dai->capture_widget) { - source = codec_dai->capture_widget; - sink = cpu_dai->capture_widget; - dev_dbg(rtd->dev, "connected DAI link %s:%s -> %s:%s\n", - codec_dai->component->name, source->name, - cpu_dai->component->name, sink->name); +static void dapm_connect_dai_link_widgets(struct snd_soc_card *card, + struct snd_soc_pcm_runtime *rtd) +{ + struct snd_soc_dai *cpu_dai; + int i, j; - snd_soc_dapm_add_path(&card->dapm, source, sink, - NULL, NULL); + for (i = 0; i < rtd->num_codecs; i++) { + struct snd_soc_dai *codec_dai = rtd->codec_dais[i]; + + for (j = 0; j < rtd->num_cpu_dai; j++) { + cpu_dai = rtd->cpu_dais[j]; + + dapm_add_valid_dai_widget(card, rtd, + codec_dai, cpu_dai); } } } @@ -4206,7 +4225,9 @@ static void soc_dapm_stream_event(struct snd_soc_pcm_runtime *rtd, int stream, { int i; - soc_dapm_dai_stream_event(rtd->cpu_dai, stream, event); + for (i = 0; i < rtd->num_cpu_dai; i++) + soc_dapm_dai_stream_event(rtd->cpu_dais[i], stream, event); + for (i = 0; i < rtd->num_codecs; i++) soc_dapm_dai_stream_event(rtd->codec_dais[i], stream, event);