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);