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