@@ -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
133131static 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
225219static 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,
296290out_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
354345dai_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)
514492static 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