All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/5] ASoC: dapm: Skip CODEC<->CODEC links in connect_dai_link_widgets()
@ 2014-05-07 13:05 Lars-Peter Clausen
  2014-05-07 13:05 ` [PATCH 2/5] ASoC: Revert "ASoC: dapm: Fix double prefix addition" Lars-Peter Clausen
                   ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: Lars-Peter Clausen @ 2014-05-07 13:05 UTC (permalink / raw)
  To: Mark Brown, Liam Girdwood
  Cc: Songhee Baek, Arun Shamanna Lakshmi, alsa-devel, Lars-Peter Clausen

For CODEC to CODEC DAI links the paths are already created in
snd_soc_dapm_new_pcm(). Make sure to not create additional connections in
snd_soc_dapm_connect_dai_link_widgets() for CODEC to CODEC links.

Fixes: b893ea5 ("ASoC: sapm: Automatically connect DAI link widgets in DAPM graph.")
Cc: stable@vger.kernel.org (for 3.14+)
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
The series applies on topic/dapm
---
 sound/soc/soc-dapm.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index fb6c7b7..142a738 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -3410,8 +3410,11 @@ void snd_soc_dapm_connect_dai_link_widgets(struct snd_soc_card *card)
 		cpu_dai = rtd->cpu_dai;
 		codec_dai = rtd->codec_dai;
 
-		/* dynamic FE links have no fixed DAI mapping */
-		if (rtd->dai_link->dynamic)
+		/*
+		 * dynamic FE links have no fixed DAI mapping.
+		 * CODEC<->CODEC links have no direct connection.
+		 */
+		if (rtd->dai_link->dynamic || rtd->dai_link->params)
 			continue;
 
 		/* there is no point in connecting BE DAI links with dummies */
-- 
1.8.0

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/5] ASoC: Revert "ASoC: dapm: Fix double prefix addition"
  2014-05-07 13:05 [PATCH 1/5] ASoC: dapm: Skip CODEC<->CODEC links in connect_dai_link_widgets() Lars-Peter Clausen
@ 2014-05-07 13:05 ` Lars-Peter Clausen
  2014-05-07 13:05 ` [PATCH 3/5] ASoC: dapm: Use snd_soc_dapm_add_path() in connect_dai_link_widgets() Lars-Peter Clausen
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Lars-Peter Clausen @ 2014-05-07 13:05 UTC (permalink / raw)
  To: Mark Brown, Liam Girdwood
  Cc: Songhee Baek, Arun Shamanna Lakshmi, alsa-devel, Lars-Peter Clausen

This reverts commit bd23c5b661858446267f4d6b2fb4edd8eb710dda.

The patch claims that the patch is necessary to avoid double prefix addition
when calling snd_soc_dapm_add_route() from snd_soc_dapm_connect_dai_link_widgets().
But snd_soc_dapm_add_route() is called with the card's DAPM context, which does
not have a prefix, which means there is no prefix that could be added a second
time.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
I might be missing something. My best guess is that this was needed in some
vendor tree, but not in upstream.
---
 sound/soc/soc-dapm.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index 142a738..08d869c 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -2381,8 +2381,7 @@ err:
 }
 
 static int snd_soc_dapm_add_route(struct snd_soc_dapm_context *dapm,
-				  const struct snd_soc_dapm_route *route,
-				  unsigned int is_prefixed)
+				  const struct snd_soc_dapm_route *route)
 {
 	struct snd_soc_dapm_widget *wsource = NULL, *wsink = NULL, *w;
 	struct snd_soc_dapm_widget *wtsource = NULL, *wtsink = NULL;
@@ -2392,7 +2391,7 @@ static int snd_soc_dapm_add_route(struct snd_soc_dapm_context *dapm,
 	char prefixed_source[80];
 	int ret;
 
-	if (dapm->codec && dapm->codec->name_prefix && !is_prefixed) {
+	if (dapm->codec && dapm->codec->name_prefix) {
 		snprintf(prefixed_sink, sizeof(prefixed_sink), "%s %s",
 			 dapm->codec->name_prefix, route->sink);
 		sink = prefixed_sink;
@@ -2520,7 +2519,7 @@ int snd_soc_dapm_add_routes(struct snd_soc_dapm_context *dapm,
 
 	mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_INIT);
 	for (i = 0; i < num; i++) {
-		r = snd_soc_dapm_add_route(dapm, route, false);
+		r = snd_soc_dapm_add_route(dapm, route);
 		if (r < 0) {
 			dev_err(dapm->dev, "ASoC: Failed to add route %s -> %s -> %s\n",
 				route->source,
@@ -3430,7 +3429,7 @@ void snd_soc_dapm_connect_dai_link_widgets(struct snd_soc_card *card)
 				cpu_dai->codec->name, r.source,
 				codec_dai->platform->name, r.sink);
 
-			snd_soc_dapm_add_route(&card->dapm, &r, true);
+			snd_soc_dapm_add_route(&card->dapm, &r);
 		}
 
 		/* connect BE DAI capture if widgets are valid */
@@ -3441,7 +3440,7 @@ void snd_soc_dapm_connect_dai_link_widgets(struct snd_soc_card *card)
 				codec_dai->codec->name, r.source,
 				cpu_dai->platform->name, r.sink);
 
-			snd_soc_dapm_add_route(&card->dapm, &r, true);
+			snd_soc_dapm_add_route(&card->dapm, &r);
 		}
 
 	}
-- 
1.8.0

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/5] ASoC: dapm: Use snd_soc_dapm_add_path() in connect_dai_link_widgets()
  2014-05-07 13:05 [PATCH 1/5] ASoC: dapm: Skip CODEC<->CODEC links in connect_dai_link_widgets() Lars-Peter Clausen
  2014-05-07 13:05 ` [PATCH 2/5] ASoC: Revert "ASoC: dapm: Fix double prefix addition" Lars-Peter Clausen
@ 2014-05-07 13:05 ` Lars-Peter Clausen
  2014-05-07 13:05 ` [PATCH 4/5] ASoC: dapm: Use snd_soc_dapm_add_path() in snd_soc_dapm_new_pcm() Lars-Peter Clausen
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Lars-Peter Clausen @ 2014-05-07 13:05 UTC (permalink / raw)
  To: Mark Brown, Liam Girdwood
  Cc: Songhee Baek, Arun Shamanna Lakshmi, alsa-devel, Lars-Peter Clausen

We already know which two widgets should be connected, so use
snd_soc_dapm_add_path() instead of snd_soc_dapm_add_route() in
snd_soc_dapm_connect_dai_link_widgets().

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 sound/soc/soc-dapm.c | 27 +++++++++++++--------------
 1 file changed, 13 insertions(+), 14 deletions(-)

diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index 08d869c..e28ce91 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -3397,12 +3397,10 @@ int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card)
 void snd_soc_dapm_connect_dai_link_widgets(struct snd_soc_card *card)
 {
 	struct snd_soc_pcm_runtime *rtd = card->rtd;
+	struct snd_soc_dapm_widget *sink, *source;
 	struct snd_soc_dai *cpu_dai, *codec_dai;
-	struct snd_soc_dapm_route r;
 	int i;
 
-	memset(&r, 0, sizeof(r));
-
 	/* for each BE DAI link... */
 	for (i = 0; i < card->num_rtd; i++) {
 		rtd = &card->rtd[i];
@@ -3423,26 +3421,27 @@ void snd_soc_dapm_connect_dai_link_widgets(struct snd_soc_card *card)
 
 		/* connect BE DAI playback if widgets are valid */
 		if (codec_dai->playback_widget && cpu_dai->playback_widget) {
-			r.source = cpu_dai->playback_widget->name;
-			r.sink = codec_dai->playback_widget->name;
+			source = cpu_dai->playback_widget;
+			sink = codec_dai->playback_widget;
 			dev_dbg(rtd->dev, "connected DAI link %s:%s -> %s:%s\n",
-				cpu_dai->codec->name, r.source,
-				codec_dai->platform->name, r.sink);
+				cpu_dai->codec->name, source->name,
+				codec_dai->platform->name, sink->name);
 
-			snd_soc_dapm_add_route(&card->dapm, &r);
+			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) {
-			r.source = codec_dai->capture_widget->name;
-			r.sink = cpu_dai->capture_widget->name;
+			source = codec_dai->capture_widget;
+			sink = cpu_dai->capture_widget;
 			dev_dbg(rtd->dev, "connected DAI link %s:%s -> %s:%s\n",
-				codec_dai->codec->name, r.source,
-				cpu_dai->platform->name, r.sink);
+				codec_dai->codec->name, source->name,
+				cpu_dai->platform->name, sink->name);
 
-			snd_soc_dapm_add_route(&card->dapm, &r);
+			snd_soc_dapm_add_path(&card->dapm, source, sink,
+				NULL, NULL);
 		}
-
 	}
 }
 
-- 
1.8.0

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 4/5] ASoC: dapm: Use snd_soc_dapm_add_path() in snd_soc_dapm_new_pcm()
  2014-05-07 13:05 [PATCH 1/5] ASoC: dapm: Skip CODEC<->CODEC links in connect_dai_link_widgets() Lars-Peter Clausen
  2014-05-07 13:05 ` [PATCH 2/5] ASoC: Revert "ASoC: dapm: Fix double prefix addition" Lars-Peter Clausen
  2014-05-07 13:05 ` [PATCH 3/5] ASoC: dapm: Use snd_soc_dapm_add_path() in connect_dai_link_widgets() Lars-Peter Clausen
@ 2014-05-07 13:05 ` Lars-Peter Clausen
  2014-05-07 13:35   ` Lars-Peter Clausen
  2014-05-07 13:05 ` [PATCH 5/5] ASoC: dapm: Simplify snd_soc_dapm_link_dai_widgets() Lars-Peter Clausen
  2014-05-07 13:55 ` [PATCH 1/5] ASoC: dapm: Skip CODEC<->CODEC links in connect_dai_link_widgets() Mark Brown
  4 siblings, 1 reply; 7+ messages in thread
From: Lars-Peter Clausen @ 2014-05-07 13:05 UTC (permalink / raw)
  To: Mark Brown, Liam Girdwood
  Cc: Songhee Baek, Arun Shamanna Lakshmi, alsa-devel, Lars-Peter Clausen

We already know the widgets we want to connect, so use snd_soc_dapm_add_path()
instead of snd_soc_dapm_add_route() in snd_soc_dapm_new_pcm().

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 sound/soc/soc-dapm.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index e28ce91..de48cab 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -3247,6 +3247,7 @@ int snd_soc_dapm_new_pcm(struct snd_soc_card *card,
 	struct snd_soc_dapm_widget *w;
 	size_t len;
 	char *link_name;
+	int ret;
 
 	len = strlen(source->name) + strlen(sink->name) + 2;
 	link_name = devm_kzalloc(card->dev, len, GFP_KERNEL);
@@ -3275,13 +3276,10 @@ int snd_soc_dapm_new_pcm(struct snd_soc_card *card,
 
 	memset(&routes, 0, sizeof(routes));
 
-	routes[0].source = source->name;
-	routes[0].sink = link_name;
-	routes[1].source = link_name;
-	routes[1].sink = sink->name;
-
-	return snd_soc_dapm_add_routes(&card->dapm, routes,
-				       ARRAY_SIZE(routes));
+	ret = snd_soc_dapm_add_path(&card->dapm, source, w, NULL, NULL);
+	if (ret)
+		return ret;
+	return snd_soc_dapm_add_path(&card->dapm, w, sink, NULL, NULL);
 }
 
 int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_context *dapm,
-- 
1.8.0

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 5/5] ASoC: dapm: Simplify snd_soc_dapm_link_dai_widgets()
  2014-05-07 13:05 [PATCH 1/5] ASoC: dapm: Skip CODEC<->CODEC links in connect_dai_link_widgets() Lars-Peter Clausen
                   ` (2 preceding siblings ...)
  2014-05-07 13:05 ` [PATCH 4/5] ASoC: dapm: Use snd_soc_dapm_add_path() in snd_soc_dapm_new_pcm() Lars-Peter Clausen
@ 2014-05-07 13:05 ` Lars-Peter Clausen
  2014-05-07 13:55 ` [PATCH 1/5] ASoC: dapm: Skip CODEC<->CODEC links in connect_dai_link_widgets() Mark Brown
  4 siblings, 0 replies; 7+ messages in thread
From: Lars-Peter Clausen @ 2014-05-07 13:05 UTC (permalink / raw)
  To: Mark Brown, Liam Girdwood
  Cc: Songhee Baek, Arun Shamanna Lakshmi, alsa-devel, Lars-Peter Clausen

If we find a widget who's stream name matches the name of a DAI widget then
that's the the widget it should be connected to. Based on the widget id we can
say in which direction the path should be. No need to go back to the DAI and
check the stream names.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 sound/soc/soc-dapm.c | 27 +++++++++------------------
 1 file changed, 9 insertions(+), 18 deletions(-)

diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index de48cab..79b3985 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -3337,6 +3337,7 @@ int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_context *dapm,
 int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card)
 {
 	struct snd_soc_dapm_widget *dai_w, *w;
+	struct snd_soc_dapm_widget *src, *sink;
 	struct snd_soc_dai *dai;
 
 	/* For each DAI widget... */
@@ -3367,25 +3368,15 @@ int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card)
 			if (!w->sname || !strstr(w->sname, dai_w->name))
 				continue;
 
-			if (dai->driver->playback.stream_name &&
-			    strstr(w->sname,
-				   dai->driver->playback.stream_name)) {
-				dev_dbg(dai->dev, "%s -> %s\n",
-					 dai->playback_widget->name, w->name);
-
-				snd_soc_dapm_add_path(w->dapm,
-					dai->playback_widget, w, NULL, NULL);
-			}
-
-			if (dai->driver->capture.stream_name &&
-			    strstr(w->sname,
-				   dai->driver->capture.stream_name)) {
-				dev_dbg(dai->dev, "%s -> %s\n",
-					w->name, dai->capture_widget->name);
-
-				snd_soc_dapm_add_path(w->dapm, w,
-					dai->capture_widget, NULL, NULL);
+			if (dai_w->id == snd_soc_dapm_dai_in) {
+				src = dai_w;
+				sink = w;
+			} else {
+				src = w;
+				sink = dai_w;
 			}
+			dev_dbg(dai->dev, "%s -> %s\n", src->name, sink->name);
+			snd_soc_dapm_add_path(w->dapm, src, sink, NULL, NULL);
 		}
 	}
 
-- 
1.8.0

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 4/5] ASoC: dapm: Use snd_soc_dapm_add_path() in snd_soc_dapm_new_pcm()
  2014-05-07 13:05 ` [PATCH 4/5] ASoC: dapm: Use snd_soc_dapm_add_path() in snd_soc_dapm_new_pcm() Lars-Peter Clausen
@ 2014-05-07 13:35   ` Lars-Peter Clausen
  0 siblings, 0 replies; 7+ messages in thread
From: Lars-Peter Clausen @ 2014-05-07 13:35 UTC (permalink / raw)
  To: Lars-Peter Clausen
  Cc: Songhee Baek, Arun Shamanna Lakshmi, alsa-devel, Mark Brown,
	Liam Girdwood

On 05/07/2014 03:05 PM, Lars-Peter Clausen wrote:
> @@ -3275,13 +3276,10 @@ int snd_soc_dapm_new_pcm(struct snd_soc_card *card,
>
>   	memset(&routes, 0, sizeof(routes));
>
> -	routes[0].source = source->name;
> -	routes[0].sink = link_name;
> -	routes[1].source = link_name;
> -	routes[1].sink = sink->name;

The patch should probably also remove routes, as it is now unused...

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/5] ASoC: dapm: Skip CODEC<->CODEC links in connect_dai_link_widgets()
  2014-05-07 13:05 [PATCH 1/5] ASoC: dapm: Skip CODEC<->CODEC links in connect_dai_link_widgets() Lars-Peter Clausen
                   ` (3 preceding siblings ...)
  2014-05-07 13:05 ` [PATCH 5/5] ASoC: dapm: Simplify snd_soc_dapm_link_dai_widgets() Lars-Peter Clausen
@ 2014-05-07 13:55 ` Mark Brown
  4 siblings, 0 replies; 7+ messages in thread
From: Mark Brown @ 2014-05-07 13:55 UTC (permalink / raw)
  To: Lars-Peter Clausen
  Cc: Songhee Baek, Arun Shamanna Lakshmi, alsa-devel, Liam Girdwood


[-- Attachment #1.1: Type: text/plain, Size: 595 bytes --]

On Wed, May 07, 2014 at 03:05:44PM +0200, Lars-Peter Clausen wrote:
> For CODEC to CODEC DAI links the paths are already created in
> snd_soc_dapm_new_pcm(). Make sure to not create additional connections in
> snd_soc_dapm_connect_dai_link_widgets() for CODEC to CODEC links.
> 
> Fixes: b893ea5 ("ASoC: sapm: Automatically connect DAI link widgets in DAPM graph.")
> Cc: stable@vger.kernel.org (for 3.14+)
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>

Why is this tagged for stable - is there a non-cosmetic issue here (your
commit log doesn't make it apparent if there is?

[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

[-- Attachment #2: Type: text/plain, Size: 0 bytes --]



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-05-07 13:56 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-05-07 13:05 [PATCH 1/5] ASoC: dapm: Skip CODEC<->CODEC links in connect_dai_link_widgets() Lars-Peter Clausen
2014-05-07 13:05 ` [PATCH 2/5] ASoC: Revert "ASoC: dapm: Fix double prefix addition" Lars-Peter Clausen
2014-05-07 13:05 ` [PATCH 3/5] ASoC: dapm: Use snd_soc_dapm_add_path() in connect_dai_link_widgets() Lars-Peter Clausen
2014-05-07 13:05 ` [PATCH 4/5] ASoC: dapm: Use snd_soc_dapm_add_path() in snd_soc_dapm_new_pcm() Lars-Peter Clausen
2014-05-07 13:35   ` Lars-Peter Clausen
2014-05-07 13:05 ` [PATCH 5/5] ASoC: dapm: Simplify snd_soc_dapm_link_dai_widgets() Lars-Peter Clausen
2014-05-07 13:55 ` [PATCH 1/5] ASoC: dapm: Skip CODEC<->CODEC links in connect_dai_link_widgets() Mark Brown

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.