aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/generic/simple-card.c
diff options
context:
space:
mode:
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2014-09-02 07:05:30 -0400
committerMark Brown <broonie@kernel.org>2014-09-03 08:53:44 -0400
commit7c7b9cf53d284fe12eeab6e13d3098b18cff4692 (patch)
tree1e0e61ab608bbf0dd563b1adca633a3dfb7427e4 /sound/soc/generic/simple-card.c
parenta44a750e5299fe2ece5aa68e8562dd6e2c2b16f4 (diff)
ASoC: simple-card: fixup cpu_dai_name clear case
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> Tested-by: Jean-Francois Moine <moinejf@free.fr> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/generic/simple-card.c')
-rw-r--r--sound/soc/generic/simple-card.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c
index fd8b04588948..b63860ddb4fd 100644
--- a/sound/soc/generic/simple-card.c
+++ b/sound/soc/generic/simple-card.c
@@ -112,8 +112,10 @@ static int
112asoc_simple_card_sub_parse_of(struct device_node *np, 112asoc_simple_card_sub_parse_of(struct device_node *np,
113 struct asoc_simple_dai *dai, 113 struct asoc_simple_dai *dai,
114 struct device_node **p_node, 114 struct device_node **p_node,
115 const char **name) 115 const char **name,
116 int *args_count)
116{ 117{
118 struct of_phandle_args args;
117 struct device_node *node; 119 struct device_node *node;
118 struct clk *clk; 120 struct clk *clk;
119 u32 val; 121 u32 val;
@@ -123,10 +125,15 @@ asoc_simple_card_sub_parse_of(struct device_node *np,
123 * get node via "sound-dai = <&phandle port>" 125 * get node via "sound-dai = <&phandle port>"
124 * it will be used as xxx_of_node on soc_bind_dai_link() 126 * it will be used as xxx_of_node on soc_bind_dai_link()
125 */ 127 */
126 node = of_parse_phandle(np, "sound-dai", 0); 128 ret = of_parse_phandle_with_args(np, "sound-dai",
127 if (!node) 129 "#sound-dai-cells", 0, &args);
128 return -ENODEV; 130 if (ret)
129 *p_node = node; 131 return ret;
132
133 *p_node = args.np;
134
135 if (args_count)
136 *args_count = args.args_count;
130 137
131 /* get dai->name */ 138 /* get dai->name */
132 ret = snd_soc_of_get_dai_name(np, name); 139 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,
176 char *name; 183 char *name;
177 char prop[128]; 184 char prop[128];
178 char *prefix = ""; 185 char *prefix = "";
179 int ret; 186 int ret, cpu_args;
180 187
181 if (is_top_level_node) 188 if (is_top_level_node)
182 prefix = "simple-audio-card,"; 189 prefix = "simple-audio-card,";
@@ -195,7 +202,8 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
195 202
196 ret = asoc_simple_card_sub_parse_of(np, &dai_props->cpu_dai, 203 ret = asoc_simple_card_sub_parse_of(np, &dai_props->cpu_dai,
197 &dai_link->cpu_of_node, 204 &dai_link->cpu_of_node,
198 &dai_link->cpu_dai_name); 205 &dai_link->cpu_dai_name,
206 &cpu_args);
199 if (ret < 0) 207 if (ret < 0)
200 goto dai_link_of_err; 208 goto dai_link_of_err;
201 209
@@ -226,7 +234,7 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
226 234
227 ret = asoc_simple_card_sub_parse_of(np, &dai_props->codec_dai, 235 ret = asoc_simple_card_sub_parse_of(np, &dai_props->codec_dai,
228 &dai_link->codec_of_node, 236 &dai_link->codec_of_node,
229 &dai_link->codec_dai_name); 237 &dai_link->codec_dai_name, NULL);
230 if (ret < 0) 238 if (ret < 0)
231 goto dai_link_of_err; 239 goto dai_link_of_err;
232 240
@@ -290,12 +298,13 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
290 * soc_bind_dai_link() will check cpu name 298 * soc_bind_dai_link() will check cpu name
291 * after of_node matching if dai_link has cpu_dai_name. 299 * after of_node matching if dai_link has cpu_dai_name.
292 * but, it will never match if name was created by fmt_single_name() 300 * but, it will never match if name was created by fmt_single_name()
293 * remove cpu_dai_name to escape name matching. 301 * remove cpu_dai_name if cpu_args was 0.
294 * see 302 * see
295 * fmt_single_name() 303 * fmt_single_name()
296 * fmt_multiple_name() 304 * fmt_multiple_name()
297 */ 305 */
298 dai_link->cpu_dai_name = NULL; 306 if (!cpu_args)
307 dai_link->cpu_dai_name = NULL;
299 308
300dai_link_of_err: 309dai_link_of_err:
301 if (np) 310 if (np)