diff mbox

[RFC] ASoC: simple-card: fixup cpu_dai_name clear case

Message ID 877g1mjn9i.wl%kuninori.morimoto.gx@gmail.com (mailing list archive)
State Accepted
Commit 7c7b9cf53d284fe12eeab6e13d3098b18cff4692
Headers show

Commit Message

Kuninori Morimoto Sept. 2, 2014, 11:05 a.m. UTC
From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>

f687d900d30a61dda38db2a99239f5284a86a309
(ASoC: simple-card: cpu_dai_name creates confusion when DT case)
cleared cpu_dai_name for caring fmt_single_name case,
and
179949bc04c7157a4b2279f62a842638b61f78f9
(ASoC: simple-card: remove dai_link->cpu_dai_name when DT)
cared multi dai-link case.
but, cpu_dai_name matching is required when fmt_multiple_name was used

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
>> Jean

Can you please test this patch ?
Is your issue solved ?

 sound/soc/generic/simple-card.c |   29 +++++++++++++++++++----------
 1 file changed, 19 insertions(+), 10 deletions(-)

Comments

Jean-Francois Moine Sept. 2, 2014, 6 p.m. UTC | #1
On Tue, 02 Sep 2014 04:05:30 -0700 (PDT)
Kuninori Morimoto <kuninori.morimoto.gx@gmail.com> wrote:

> From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> 
> f687d900d30a61dda38db2a99239f5284a86a309
> (ASoC: simple-card: cpu_dai_name creates confusion when DT case)
> cleared cpu_dai_name for caring fmt_single_name case,
> and
> 179949bc04c7157a4b2279f62a842638b61f78f9
> (ASoC: simple-card: remove dai_link->cpu_dai_name when DT)
> cared multi dai-link case.
> but, cpu_dai_name matching is required when fmt_multiple_name was used
> 
> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> ---
> >> Jean  
> 
> Can you please test this patch ?
> Is your issue solved ?
> 
>  sound/soc/generic/simple-card.c |   29 +++++++++++++++++++----------
>  1 file changed, 19 insertions(+), 10 deletions(-)

Everything works fine. Thanks.

Tested-by: Jean-Francois Moine <moinejf@free.fr>
Mark Brown Sept. 3, 2014, 12:54 p.m. UTC | #2
On Tue, Sep 02, 2014 at 04:05:30AM -0700, Kuninori Morimoto wrote:
> From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> 
> f687d900d30a61dda38db2a99239f5284a86a309
> (ASoC: simple-card: cpu_dai_name creates confusion when DT case)
> cleared cpu_dai_name for caring fmt_single_name case,
> and

Applied, thanks.
diff mbox

Patch

diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c
index fd8b045..b63860d 100644
--- a/sound/soc/generic/simple-card.c
+++ b/sound/soc/generic/simple-card.c
@@ -112,8 +112,10 @@  static int
 asoc_simple_card_sub_parse_of(struct device_node *np,
 			      struct asoc_simple_dai *dai,
 			      struct device_node **p_node,
-			      const char **name)
+			      const char **name,
+			      int *args_count)
 {
+	struct of_phandle_args args;
 	struct device_node *node;
 	struct clk *clk;
 	u32 val;
@@ -123,10 +125,15 @@  asoc_simple_card_sub_parse_of(struct device_node *np,
 	 * get node via "sound-dai = <&phandle port>"
 	 * it will be used as xxx_of_node on soc_bind_dai_link()
 	 */
-	node = of_parse_phandle(np, "sound-dai", 0);
-	if (!node)
-		return -ENODEV;
-	*p_node = node;
+	ret = of_parse_phandle_with_args(np, "sound-dai",
+					 "#sound-dai-cells", 0, &args);
+	if (ret)
+		return ret;
+
+	*p_node = args.np;
+
+	if (args_count)
+		*args_count = args.args_count;
 
 	/* get dai->name */
 	ret = snd_soc_of_get_dai_name(np, name);
@@ -176,7 +183,7 @@  static int asoc_simple_card_dai_link_of(struct device_node *node,
 	char *name;
 	char prop[128];
 	char *prefix = "";
-	int ret;
+	int ret, cpu_args;
 
 	if (is_top_level_node)
 		prefix = "simple-audio-card,";
@@ -195,7 +202,8 @@  static int asoc_simple_card_dai_link_of(struct device_node *node,
 
 	ret = asoc_simple_card_sub_parse_of(np, &dai_props->cpu_dai,
 					    &dai_link->cpu_of_node,
-					    &dai_link->cpu_dai_name);
+					    &dai_link->cpu_dai_name,
+					    &cpu_args);
 	if (ret < 0)
 		goto dai_link_of_err;
 
@@ -226,7 +234,7 @@  static int asoc_simple_card_dai_link_of(struct device_node *node,
 
 	ret = asoc_simple_card_sub_parse_of(np, &dai_props->codec_dai,
 					    &dai_link->codec_of_node,
-					    &dai_link->codec_dai_name);
+					    &dai_link->codec_dai_name, NULL);
 	if (ret < 0)
 		goto dai_link_of_err;
 
@@ -290,12 +298,13 @@  static int asoc_simple_card_dai_link_of(struct device_node *node,
 	 * soc_bind_dai_link() will check cpu name
 	 * after of_node matching if dai_link has cpu_dai_name.
 	 * but, it will never match if name was created by fmt_single_name()
-	 * remove cpu_dai_name to escape name matching.
+	 * remove cpu_dai_name if cpu_args was 0.
 	 * see
 	 *	fmt_single_name()
 	 *	fmt_multiple_name()
 	 */
-	dai_link->cpu_dai_name = NULL;
+	if (!cpu_args)
+		dai_link->cpu_dai_name = NULL;
 
 dai_link_of_err:
 	if (np)