diff options
author | Mark Brown <broonie@kernel.org> | 2019-07-26 08:10:09 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2019-07-26 08:10:09 -0400 |
commit | 3b46a67af2eb8214a634a37c485146ca0ef42849 (patch) | |
tree | 1fef31dfdf401819f71158ad28ba87e7c8c4d886 /sound/soc/generic | |
parent | 3dcfb397dad2ad55bf50de3c5d5a57090d35a18a (diff) | |
parent | 1e112c35e3c96db7c8ca6ddaa96574f00c06e7db (diff) |
Merge branch 'asoc-5.3' into asoc-5.4
Diffstat (limited to 'sound/soc/generic')
-rw-r--r-- | sound/soc/generic/audio-graph-card.c | 30 | ||||
-rw-r--r-- | sound/soc/generic/simple-card-utils.c | 7 | ||||
-rw-r--r-- | sound/soc/generic/simple-card.c | 26 |
3 files changed, 36 insertions, 27 deletions
diff --git a/sound/soc/generic/audio-graph-card.c b/sound/soc/generic/audio-graph-card.c index 30a4e8399ec3..288df245b2f0 100644 --- a/sound/soc/generic/audio-graph-card.c +++ b/sound/soc/generic/audio-graph-card.c | |||
@@ -63,6 +63,7 @@ static int graph_get_dai_id(struct device_node *ep) | |||
63 | struct device_node *endpoint; | 63 | struct device_node *endpoint; |
64 | struct of_endpoint info; | 64 | struct of_endpoint info; |
65 | int i, id; | 65 | int i, id; |
66 | const u32 *reg; | ||
66 | int ret; | 67 | int ret; |
67 | 68 | ||
68 | /* use driver specified DAI ID if exist */ | 69 | /* use driver specified DAI ID if exist */ |
@@ -83,8 +84,9 @@ static int graph_get_dai_id(struct device_node *ep) | |||
83 | return info.id; | 84 | return info.id; |
84 | 85 | ||
85 | node = of_get_parent(ep); | 86 | node = of_get_parent(ep); |
87 | reg = of_get_property(node, "reg", NULL); | ||
86 | of_node_put(node); | 88 | of_node_put(node); |
87 | if (of_get_property(node, "reg", NULL)) | 89 | if (reg) |
88 | return info.port; | 90 | return info.port; |
89 | } | 91 | } |
90 | node = of_graph_get_port_parent(ep); | 92 | node = of_graph_get_port_parent(ep); |
@@ -208,10 +210,6 @@ static int graph_dai_link_of_dpcm(struct asoc_simple_priv *priv, | |||
208 | 210 | ||
209 | dev_dbg(dev, "link_of DPCM (%pOF)\n", ep); | 211 | dev_dbg(dev, "link_of DPCM (%pOF)\n", ep); |
210 | 212 | ||
211 | of_node_put(ports); | ||
212 | of_node_put(port); | ||
213 | of_node_put(node); | ||
214 | |||
215 | if (li->cpu) { | 213 | if (li->cpu) { |
216 | int is_single_links = 0; | 214 | int is_single_links = 0; |
217 | 215 | ||
@@ -229,17 +227,17 @@ static int graph_dai_link_of_dpcm(struct asoc_simple_priv *priv, | |||
229 | 227 | ||
230 | ret = asoc_simple_parse_cpu(ep, dai_link, &is_single_links); | 228 | ret = asoc_simple_parse_cpu(ep, dai_link, &is_single_links); |
231 | if (ret) | 229 | if (ret) |
232 | return ret; | 230 | goto out_put_node; |
233 | 231 | ||
234 | ret = asoc_simple_parse_clk_cpu(dev, ep, dai_link, dai); | 232 | ret = asoc_simple_parse_clk_cpu(dev, ep, dai_link, dai); |
235 | if (ret < 0) | 233 | if (ret < 0) |
236 | return ret; | 234 | goto out_put_node; |
237 | 235 | ||
238 | ret = asoc_simple_set_dailink_name(dev, dai_link, | 236 | ret = asoc_simple_set_dailink_name(dev, dai_link, |
239 | "fe.%s", | 237 | "fe.%s", |
240 | cpus->dai_name); | 238 | cpus->dai_name); |
241 | if (ret < 0) | 239 | if (ret < 0) |
242 | return ret; | 240 | goto out_put_node; |
243 | 241 | ||
244 | /* card->num_links includes Codec */ | 242 | /* card->num_links includes Codec */ |
245 | asoc_simple_canonicalize_cpu(dai_link, is_single_links); | 243 | asoc_simple_canonicalize_cpu(dai_link, is_single_links); |
@@ -263,17 +261,17 @@ static int graph_dai_link_of_dpcm(struct asoc_simple_priv *priv, | |||
263 | 261 | ||
264 | ret = asoc_simple_parse_codec(ep, dai_link); | 262 | ret = asoc_simple_parse_codec(ep, dai_link); |
265 | if (ret < 0) | 263 | if (ret < 0) |
266 | return ret; | 264 | goto out_put_node; |
267 | 265 | ||
268 | ret = asoc_simple_parse_clk_codec(dev, ep, dai_link, dai); | 266 | ret = asoc_simple_parse_clk_codec(dev, ep, dai_link, dai); |
269 | if (ret < 0) | 267 | if (ret < 0) |
270 | return ret; | 268 | goto out_put_node; |
271 | 269 | ||
272 | ret = asoc_simple_set_dailink_name(dev, dai_link, | 270 | ret = asoc_simple_set_dailink_name(dev, dai_link, |
273 | "be.%s", | 271 | "be.%s", |
274 | codecs->dai_name); | 272 | codecs->dai_name); |
275 | if (ret < 0) | 273 | if (ret < 0) |
276 | return ret; | 274 | goto out_put_node; |
277 | 275 | ||
278 | /* check "prefix" from top node */ | 276 | /* check "prefix" from top node */ |
279 | snd_soc_of_parse_node_prefix(top, cconf, codecs->of_node, | 277 | snd_soc_of_parse_node_prefix(top, cconf, codecs->of_node, |
@@ -293,19 +291,23 @@ static int graph_dai_link_of_dpcm(struct asoc_simple_priv *priv, | |||
293 | 291 | ||
294 | ret = asoc_simple_parse_tdm(ep, dai); | 292 | ret = asoc_simple_parse_tdm(ep, dai); |
295 | if (ret) | 293 | if (ret) |
296 | return ret; | 294 | goto out_put_node; |
297 | 295 | ||
298 | ret = asoc_simple_parse_daifmt(dev, cpu_ep, codec_ep, | 296 | ret = asoc_simple_parse_daifmt(dev, cpu_ep, codec_ep, |
299 | NULL, &dai_link->dai_fmt); | 297 | NULL, &dai_link->dai_fmt); |
300 | if (ret < 0) | 298 | if (ret < 0) |
301 | return ret; | 299 | goto out_put_node; |
302 | 300 | ||
303 | dai_link->dpcm_playback = 1; | 301 | dai_link->dpcm_playback = 1; |
304 | dai_link->dpcm_capture = 1; | 302 | dai_link->dpcm_capture = 1; |
305 | dai_link->ops = &graph_ops; | 303 | dai_link->ops = &graph_ops; |
306 | dai_link->init = asoc_simple_dai_init; | 304 | dai_link->init = asoc_simple_dai_init; |
307 | 305 | ||
308 | return 0; | 306 | out_put_node: |
307 | of_node_put(ports); | ||
308 | of_node_put(port); | ||
309 | of_node_put(node); | ||
310 | return ret; | ||
309 | } | 311 | } |
310 | 312 | ||
311 | static int graph_dai_link_of(struct asoc_simple_priv *priv, | 313 | static int graph_dai_link_of(struct asoc_simple_priv *priv, |
diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c index ac8678fe55ff..556b1a789629 100644 --- a/sound/soc/generic/simple-card-utils.c +++ b/sound/soc/generic/simple-card-utils.c | |||
@@ -349,6 +349,13 @@ void asoc_simple_canonicalize_platform(struct snd_soc_dai_link *dai_link) | |||
349 | /* Assumes platform == cpu */ | 349 | /* Assumes platform == cpu */ |
350 | if (!dai_link->platforms->of_node) | 350 | if (!dai_link->platforms->of_node) |
351 | dai_link->platforms->of_node = dai_link->cpus->of_node; | 351 | dai_link->platforms->of_node = dai_link->cpus->of_node; |
352 | |||
353 | /* | ||
354 | * DPCM BE can be no platform. | ||
355 | * Alloced memory will be waste, but not leak. | ||
356 | */ | ||
357 | if (!dai_link->platforms->of_node) | ||
358 | dai_link->num_platforms = 0; | ||
352 | } | 359 | } |
353 | EXPORT_SYMBOL_GPL(asoc_simple_canonicalize_platform); | 360 | EXPORT_SYMBOL_GPL(asoc_simple_canonicalize_platform); |
354 | 361 | ||
diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c index e5cde0d5e63c..ef849151ba56 100644 --- a/sound/soc/generic/simple-card.c +++ b/sound/soc/generic/simple-card.c | |||
@@ -124,8 +124,6 @@ static int simple_dai_link_of_dpcm(struct asoc_simple_priv *priv, | |||
124 | 124 | ||
125 | li->link++; | 125 | li->link++; |
126 | 126 | ||
127 | of_node_put(node); | ||
128 | |||
129 | /* For single DAI link & old style of DT node */ | 127 | /* For single DAI link & old style of DT node */ |
130 | if (is_top) | 128 | if (is_top) |
131 | prefix = PREFIX; | 129 | prefix = PREFIX; |
@@ -147,17 +145,17 @@ static int simple_dai_link_of_dpcm(struct asoc_simple_priv *priv, | |||
147 | 145 | ||
148 | ret = asoc_simple_parse_cpu(np, dai_link, &is_single_links); | 146 | ret = asoc_simple_parse_cpu(np, dai_link, &is_single_links); |
149 | if (ret) | 147 | if (ret) |
150 | return ret; | 148 | goto out_put_node; |
151 | 149 | ||
152 | ret = asoc_simple_parse_clk_cpu(dev, np, dai_link, dai); | 150 | ret = asoc_simple_parse_clk_cpu(dev, np, dai_link, dai); |
153 | if (ret < 0) | 151 | if (ret < 0) |
154 | return ret; | 152 | goto out_put_node; |
155 | 153 | ||
156 | ret = asoc_simple_set_dailink_name(dev, dai_link, | 154 | ret = asoc_simple_set_dailink_name(dev, dai_link, |
157 | "fe.%s", | 155 | "fe.%s", |
158 | cpus->dai_name); | 156 | cpus->dai_name); |
159 | if (ret < 0) | 157 | if (ret < 0) |
160 | return ret; | 158 | goto out_put_node; |
161 | 159 | ||
162 | asoc_simple_canonicalize_cpu(dai_link, is_single_links); | 160 | asoc_simple_canonicalize_cpu(dai_link, is_single_links); |
163 | } else { | 161 | } else { |
@@ -180,17 +178,17 @@ static int simple_dai_link_of_dpcm(struct asoc_simple_priv *priv, | |||
180 | 178 | ||
181 | ret = asoc_simple_parse_codec(np, dai_link); | 179 | ret = asoc_simple_parse_codec(np, dai_link); |
182 | if (ret < 0) | 180 | if (ret < 0) |
183 | return ret; | 181 | goto out_put_node; |
184 | 182 | ||
185 | ret = asoc_simple_parse_clk_codec(dev, np, dai_link, dai); | 183 | ret = asoc_simple_parse_clk_codec(dev, np, dai_link, dai); |
186 | if (ret < 0) | 184 | if (ret < 0) |
187 | return ret; | 185 | goto out_put_node; |
188 | 186 | ||
189 | ret = asoc_simple_set_dailink_name(dev, dai_link, | 187 | ret = asoc_simple_set_dailink_name(dev, dai_link, |
190 | "be.%s", | 188 | "be.%s", |
191 | codecs->dai_name); | 189 | codecs->dai_name); |
192 | if (ret < 0) | 190 | if (ret < 0) |
193 | return ret; | 191 | goto out_put_node; |
194 | 192 | ||
195 | /* check "prefix" from top node */ | 193 | /* check "prefix" from top node */ |
196 | snd_soc_of_parse_node_prefix(top, cconf, codecs->of_node, | 194 | snd_soc_of_parse_node_prefix(top, cconf, codecs->of_node, |
@@ -208,19 +206,21 @@ static int simple_dai_link_of_dpcm(struct asoc_simple_priv *priv, | |||
208 | 206 | ||
209 | ret = asoc_simple_parse_tdm(np, dai); | 207 | ret = asoc_simple_parse_tdm(np, dai); |
210 | if (ret) | 208 | if (ret) |
211 | return ret; | 209 | goto out_put_node; |
212 | 210 | ||
213 | ret = asoc_simple_parse_daifmt(dev, node, codec, | 211 | ret = asoc_simple_parse_daifmt(dev, node, codec, |
214 | prefix, &dai_link->dai_fmt); | 212 | prefix, &dai_link->dai_fmt); |
215 | if (ret < 0) | 213 | if (ret < 0) |
216 | return ret; | 214 | goto out_put_node; |
217 | 215 | ||
218 | dai_link->dpcm_playback = 1; | 216 | dai_link->dpcm_playback = 1; |
219 | dai_link->dpcm_capture = 1; | 217 | dai_link->dpcm_capture = 1; |
220 | dai_link->ops = &simple_ops; | 218 | dai_link->ops = &simple_ops; |
221 | dai_link->init = asoc_simple_dai_init; | 219 | dai_link->init = asoc_simple_dai_init; |
222 | 220 | ||
223 | return 0; | 221 | out_put_node: |
222 | of_node_put(node); | ||
223 | return ret; | ||
224 | } | 224 | } |
225 | 225 | ||
226 | static int simple_dai_link_of(struct asoc_simple_priv *priv, | 226 | static int simple_dai_link_of(struct asoc_simple_priv *priv, |
@@ -364,8 +364,6 @@ static int simple_for_each_link(struct asoc_simple_priv *priv, | |||
364 | goto error; | 364 | goto error; |
365 | } | 365 | } |
366 | 366 | ||
367 | of_node_put(codec); | ||
368 | |||
369 | /* get convert-xxx property */ | 367 | /* get convert-xxx property */ |
370 | memset(&adata, 0, sizeof(adata)); | 368 | memset(&adata, 0, sizeof(adata)); |
371 | for_each_child_of_node(node, np) | 369 | for_each_child_of_node(node, np) |
@@ -387,11 +385,13 @@ static int simple_for_each_link(struct asoc_simple_priv *priv, | |||
387 | ret = func_noml(priv, np, codec, li, is_top); | 385 | ret = func_noml(priv, np, codec, li, is_top); |
388 | 386 | ||
389 | if (ret < 0) { | 387 | if (ret < 0) { |
388 | of_node_put(codec); | ||
390 | of_node_put(np); | 389 | of_node_put(np); |
391 | goto error; | 390 | goto error; |
392 | } | 391 | } |
393 | } | 392 | } |
394 | 393 | ||
394 | of_node_put(codec); | ||
395 | node = of_get_next_child(top, node); | 395 | node = of_get_next_child(top, node); |
396 | } while (!is_top && node); | 396 | } while (!is_top && node); |
397 | 397 | ||