Skip to content

Commit 2518a0e

Browse files
morimotobroonie
authored andcommitted
ASoC: simple-card: use __free(device_node) for device node
simple-card handles many type of device_node, thus need to use of_node_put() in many place. Let's use __free(device_node) and avoid it. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Tested-by: Stephen Gordon <gordoste@iinet.net.au> Link: https://patch.msgid.link/87v7uso5js.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent c8a1dcc commit 2518a0e

1 file changed

Lines changed: 17 additions & 41 deletions

File tree

sound/soc/generic/simple-card.c

Lines changed: 17 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -120,14 +120,12 @@ static void simple_parse_convert(struct device *dev,
120120
struct simple_util_data *adata)
121121
{
122122
struct device_node *top = dev->of_node;
123-
struct device_node *node = of_get_parent(np);
123+
struct device_node *node __free(device_node) = of_get_parent(np);
124124

125125
simple_util_parse_convert(top, PREFIX, adata);
126126
simple_util_parse_convert(node, PREFIX, adata);
127127
simple_util_parse_convert(node, NULL, adata);
128128
simple_util_parse_convert(np, NULL, adata);
129-
130-
of_node_put(node);
131129
}
132130

133131
static int simple_parse_node(struct simple_util_priv *priv,
@@ -176,7 +174,7 @@ static int simple_link_init(struct simple_util_priv *priv,
176174
struct device_node *top = dev->of_node;
177175
struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, li->link);
178176
struct simple_dai_props *dai_props = simple_priv_to_props(priv, li->link);
179-
struct device_node *node = of_get_parent(cpu);
177+
struct device_node *node __free(device_node) = of_get_parent(cpu);
180178
enum snd_soc_trigger_order trigger_start = SND_SOC_TRIGGER_ORDER_DEFAULT;
181179
enum snd_soc_trigger_order trigger_stop = SND_SOC_TRIGGER_ORDER_DEFAULT;
182180
bool playback_only = 0, capture_only = 0;
@@ -185,7 +183,7 @@ static int simple_link_init(struct simple_util_priv *priv,
185183
ret = simple_util_parse_daifmt(dev, node, codec,
186184
prefix, &dai_link->dai_fmt);
187185
if (ret < 0)
188-
goto init_end;
186+
return ret;
189187

190188
graph_util_parse_link_direction(top, &playback_only, &capture_only);
191189
graph_util_parse_link_direction(node, &playback_only, &capture_only);
@@ -215,11 +213,7 @@ static int simple_link_init(struct simple_util_priv *priv,
215213
dai_link->init = simple_util_dai_init;
216214
dai_link->ops = &simple_ops;
217215

218-
ret = simple_util_set_dailink_name(dev, dai_link, name);
219-
init_end:
220-
of_node_put(node);
221-
222-
return ret;
216+
return simple_util_set_dailink_name(dev, dai_link, name);
223217
}
224218

225219
static int simple_dai_link_of_dpcm(struct simple_util_priv *priv,
@@ -232,7 +226,7 @@ static int simple_dai_link_of_dpcm(struct simple_util_priv *priv,
232226
struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, li->link);
233227
struct simple_dai_props *dai_props = simple_priv_to_props(priv, li->link);
234228
struct device_node *top = dev->of_node;
235-
struct device_node *node = of_get_parent(np);
229+
struct device_node *node __free(device_node) = of_get_parent(np);
236230
char *prefix = "";
237231
char dai_name[64];
238232
int ret;
@@ -296,7 +290,6 @@ static int simple_dai_link_of_dpcm(struct simple_util_priv *priv,
296290
out_put_node:
297291
li->link++;
298292

299-
of_node_put(node);
300293
return ret;
301294
}
302295

@@ -312,15 +305,13 @@ static int simple_dai_link_of(struct simple_util_priv *priv,
312305
struct snd_soc_dai_link_component *codecs = snd_soc_link_to_codec(dai_link, 0);
313306
struct snd_soc_dai_link_component *platforms = snd_soc_link_to_platform(dai_link, 0);
314307
struct device_node *cpu = NULL;
315-
struct device_node *node = NULL;
316-
struct device_node *plat = NULL;
317308
char dai_name[64];
318309
char prop[128];
319310
char *prefix = "";
320311
int ret, single_cpu = 0;
321312

322313
cpu = np;
323-
node = of_get_parent(np);
314+
struct device_node *node __free(device_node) = of_get_parent(np);
324315

325316
dev_dbg(dev, "link_of (%pOF)\n", node);
326317

@@ -329,7 +320,7 @@ static int simple_dai_link_of(struct simple_util_priv *priv,
329320
prefix = PREFIX;
330321

331322
snprintf(prop, sizeof(prop), "%splat", prefix);
332-
plat = of_get_child_by_name(node, prop);
323+
struct device_node *plat __free(device_node) = of_get_child_by_name(node, prop);
333324

334325
ret = simple_parse_node(priv, cpu, li, prefix, &single_cpu);
335326
if (ret < 0)
@@ -352,9 +343,6 @@ static int simple_dai_link_of(struct simple_util_priv *priv,
352343
ret = simple_link_init(priv, cpu, codec, li, prefix, dai_name);
353344

354345
dai_link_of_err:
355-
of_node_put(plat);
356-
of_node_put(node);
357-
358346
li->link++;
359347

360348
return ret;
@@ -374,7 +362,6 @@ static int __simple_for_each_link(struct simple_util_priv *priv,
374362
struct device *dev = simple_priv_to_dev(priv);
375363
struct device_node *top = dev->of_node;
376364
struct device_node *node;
377-
struct device_node *add_devs;
378365
uintptr_t dpcm_selectable = (uintptr_t)of_device_get_match_data(dev);
379366
bool is_top = 0;
380367
int ret = 0;
@@ -386,14 +373,11 @@ static int __simple_for_each_link(struct simple_util_priv *priv,
386373
is_top = 1;
387374
}
388375

389-
add_devs = of_get_child_by_name(top, PREFIX "additional-devs");
376+
struct device_node *add_devs __free(device_node) = of_get_child_by_name(top, PREFIX "additional-devs");
390377

391378
/* loop for all dai-link */
392379
do {
393380
struct simple_util_data adata;
394-
struct device_node *codec;
395-
struct device_node *plat;
396-
struct device_node *np;
397381
int num = of_get_child_count(node);
398382

399383
/* Skip additional-devs node */
@@ -403,26 +387,26 @@ static int __simple_for_each_link(struct simple_util_priv *priv,
403387
}
404388

405389
/* get codec */
406-
codec = of_get_child_by_name(node, is_top ?
407-
PREFIX "codec" : "codec");
390+
struct device_node *codec __free(device_node) =
391+
of_get_child_by_name(node, is_top ? PREFIX "codec" : "codec");
408392
if (!codec) {
409393
ret = -ENODEV;
410394
goto error;
411395
}
412396
/* get platform */
413-
plat = of_get_child_by_name(node, is_top ?
414-
PREFIX "plat" : "plat");
397+
struct device_node *plat __free(device_node) =
398+
of_get_child_by_name(node, is_top ? PREFIX "plat" : "plat");
415399

416400
/* get convert-xxx property */
417401
memset(&adata, 0, sizeof(adata));
418-
for_each_child_of_node(node, np) {
402+
for_each_child_of_node_scoped(node, np) {
419403
if (np == add_devs)
420404
continue;
421405
simple_parse_convert(dev, np, &adata);
422406
}
423407

424408
/* loop for all CPU/Codec node */
425-
for_each_child_of_node(node, np) {
409+
for_each_child_of_node_scoped(node, np) {
426410
if (plat == np || add_devs == np)
427411
continue;
428412
/*
@@ -452,22 +436,16 @@ static int __simple_for_each_link(struct simple_util_priv *priv,
452436
ret = func_noml(priv, np, codec, li, is_top);
453437
}
454438

455-
if (ret < 0) {
456-
of_node_put(codec);
457-
of_node_put(plat);
458-
of_node_put(np);
439+
if (ret < 0)
459440
goto error;
460-
}
461441
}
462442

463-
of_node_put(codec);
464-
of_node_put(plat);
465443
node = of_get_next_child(top, node);
466444
} while (!is_top && node);
467445

468446
error:
469-
of_node_put(add_devs);
470447
of_node_put(node);
448+
471449
return ret;
472450
}
473451

@@ -514,15 +492,13 @@ static void simple_depopulate_aux(void *data)
514492
static int simple_populate_aux(struct simple_util_priv *priv)
515493
{
516494
struct device *dev = simple_priv_to_dev(priv);
517-
struct device_node *node;
495+
struct device_node *node __free(device_node) = of_get_child_by_name(dev->of_node, PREFIX "additional-devs");
518496
int ret;
519497

520-
node = of_get_child_by_name(dev->of_node, PREFIX "additional-devs");
521498
if (!node)
522499
return 0;
523500

524501
ret = of_platform_populate(node, NULL, NULL, dev);
525-
of_node_put(node);
526502
if (ret)
527503
return ret;
528504

0 commit comments

Comments
 (0)