The for_each_child_of_node_scoped() helper provides a scope-based
clean-up functionality to put the device_node automatically, and
as such, there is no need to call of_node_put() directly.

Thus, use this helper to simplify the code.

Signed-off-by: Ai Chao <aic...@kylinos.cn>
---
 sound/soc/renesas/rcar/core.c | 39 ++++++++++++-----------------------
 sound/soc/renesas/rcar/ctu.c  |  8 ++-----
 sound/soc/renesas/rcar/dma.c  |  4 +---
 sound/soc/renesas/rcar/dvc.c  |  8 ++-----
 sound/soc/renesas/rcar/mix.c  |  8 ++-----
 sound/soc/renesas/rcar/src.c  | 10 ++-------
 sound/soc/renesas/rcar/ssi.c  | 18 +++++-----------
 sound/soc/renesas/rcar/ssiu.c |  7 ++-----
 8 files changed, 29 insertions(+), 73 deletions(-)

diff --git a/sound/soc/renesas/rcar/core.c b/sound/soc/renesas/rcar/core.c
index 30afc942d381..91f84495e7b2 100644
--- a/sound/soc/renesas/rcar/core.c
+++ b/sound/soc/renesas/rcar/core.c
@@ -1075,7 +1075,6 @@ static void rsnd_parse_tdm_split_mode(struct rsnd_priv 
*priv,
 {
        struct device *dev = rsnd_priv_to_dev(priv);
        struct device_node *ssiu_np = rsnd_ssiu_of_node(priv);
-       struct device_node *np;
        int is_play = rsnd_io_is_play(io);
        int i;
 
@@ -1094,7 +1093,7 @@ static void rsnd_parse_tdm_split_mode(struct rsnd_priv 
*priv,
                if (!node)
                        break;
 
-               for_each_child_of_node(ssiu_np, np) {
+               for_each_child_of_node_scoped(ssiu_np, np) {
                        if (np == node) {
                                rsnd_flags_set(io, RSND_STREAM_TDM_SPLIT);
                                dev_dbg(dev, "%s is part of TDM Split\n", 
io->name);
@@ -1154,21 +1153,18 @@ void rsnd_parse_connect_common(struct rsnd_dai *rdai, 
char *name,
 {
        struct rsnd_priv *priv = rsnd_rdai_to_priv(rdai);
        struct device *dev = rsnd_priv_to_dev(priv);
-       struct device_node *np;
        int i;
 
        if (!node)
                return;
 
        i = 0;
-       for_each_child_of_node(node, np) {
+       for_each_child_of_node_scoped(node, np) {
                struct rsnd_mod *mod;
 
                i = rsnd_node_fixed_index(dev, np, name, i);
-               if (i < 0) {
-                       of_node_put(np);
+               if (i < 0)
                        break;
-               }
 
                mod = mod_get(priv, i);
 
@@ -1217,16 +1213,13 @@ int rsnd_node_fixed_index(struct device *dev, struct 
device_node *node, char *na
 int rsnd_node_count(struct rsnd_priv *priv, struct device_node *node, char 
*name)
 {
        struct device *dev = rsnd_priv_to_dev(priv);
-       struct device_node *np;
        int i;
 
        i = 0;
-       for_each_child_of_node(node, np) {
+       for_each_child_of_node_scoped(node, np) {
                i = rsnd_node_fixed_index(dev, np, name, i);
-               if (i < 0) {
-                       of_node_put(np);
+               if (i < 0)
                        return 0;
-               }
                i++;
        }
 
@@ -1250,7 +1243,7 @@ static int rsnd_dai_of_node(struct rsnd_priv *priv, int 
*is_graph)
 {
        struct device *dev = rsnd_priv_to_dev(priv);
        struct device_node *np = dev->of_node;
-       struct device_node *ports, *node;
+       struct device_node *node;
        int nr = 0;
        int i = 0;
 
@@ -1270,16 +1263,15 @@ static int rsnd_dai_of_node(struct rsnd_priv *priv, int 
*is_graph)
 
        of_node_put(node);
 
-       for_each_child_of_node(np, node) {
-               if (!of_node_name_eq(node, RSND_NODE_DAI))
+       for_each_child_of_node_scoped(np, ports) {
+               if (!of_node_name_eq(ports, RSND_NODE_DAI))
                        continue;
 
-               priv->component_dais[i] = of_get_child_count(node);
+               priv->component_dais[i] = of_get_child_count(ports);
                nr += priv->component_dais[i];
                i++;
                if (i >= RSND_MAX_COMPONENT) {
                        dev_info(dev, "reach to max component\n");
-                       of_node_put(node);
                        break;
                }
        }
@@ -1290,7 +1282,7 @@ static int rsnd_dai_of_node(struct rsnd_priv *priv, int 
*is_graph)
        /*
         * Audio-Graph-Card
         */
-       for_each_child_of_node(np, ports) {
+       for_each_child_of_node_scoped(np, ports) {
                node = rsnd_pick_endpoint_node_for_ports(ports, np);
                if (!node)
                        continue;
@@ -1299,7 +1291,6 @@ static int rsnd_dai_of_node(struct rsnd_priv *priv, int 
*is_graph)
                i++;
                if (i >= RSND_MAX_COMPONENT) {
                        dev_info(dev, "reach to max component\n");
-                       of_node_put(ports);
                        break;
                }
        }
@@ -1500,10 +1491,9 @@ static int rsnd_dai_probe(struct rsnd_priv *priv)
        dai_i = 0;
        if (is_graph) {
                struct device_node *dai_np_port;
-               struct device_node *ports;
                struct device_node *dai_np;
 
-               for_each_child_of_node(np, ports) {
+               for_each_child_of_node_scoped(np, ports) {
                        dai_np_port = rsnd_pick_endpoint_node_for_ports(ports, 
np);
                        if (!dai_np_port)
                                continue;
@@ -1520,14 +1510,11 @@ static int rsnd_dai_probe(struct rsnd_priv *priv)
                        }
                }
        } else {
-               struct device_node *node;
-               struct device_node *dai_np;
-
-               for_each_child_of_node(np, node) {
+               for_each_child_of_node_scoped(np, node) {
                        if (!of_node_name_eq(node, RSND_NODE_DAI))
                                continue;
 
-                       for_each_child_of_node(node, dai_np) {
+                       for_each_child_of_node_scoped(node, dai_np) {
                                __rsnd_dai_probe(priv, dai_np, np, dai_i, 
dai_i);
                                if (!rsnd_is_gen1(priv) && !rsnd_is_gen2(priv)) 
{
                                        rdai = rsnd_rdai_get(priv, dai_i);
diff --git a/sound/soc/renesas/rcar/ctu.c b/sound/soc/renesas/rcar/ctu.c
index a26ec7b780cd..bd4c61f9fb3c 100644
--- a/sound/soc/renesas/rcar/ctu.c
+++ b/sound/soc/renesas/rcar/ctu.c
@@ -316,7 +316,6 @@ struct rsnd_mod *rsnd_ctu_mod_get(struct rsnd_priv *priv, 
int id)
 int rsnd_ctu_probe(struct rsnd_priv *priv)
 {
        struct device_node *node;
-       struct device_node *np;
        struct device *dev = rsnd_priv_to_dev(priv);
        struct rsnd_ctu *ctu;
        struct clk *clk;
@@ -344,7 +343,7 @@ int rsnd_ctu_probe(struct rsnd_priv *priv)
 
        i = 0;
        ret = 0;
-       for_each_child_of_node(node, np) {
+       for_each_child_of_node_scoped(node, np) {
                ctu = rsnd_ctu_get(priv, i);
 
                /*
@@ -357,16 +356,13 @@ int rsnd_ctu_probe(struct rsnd_priv *priv)
                clk = devm_clk_get(dev, name);
                if (IS_ERR(clk)) {
                        ret = PTR_ERR(clk);
-                       of_node_put(np);
                        goto rsnd_ctu_probe_done;
                }
 
                ret = rsnd_mod_init(priv, rsnd_mod_get(ctu), &rsnd_ctu_ops,
                                    clk, RSND_MOD_CTU, i);
-               if (ret) {
-                       of_node_put(np);
+               if (ret)
                        goto rsnd_ctu_probe_done;
-               }
 
                i++;
        }
diff --git a/sound/soc/renesas/rcar/dma.c b/sound/soc/renesas/rcar/dma.c
index 2342bbb6fe92..2035ce06fe4c 100644
--- a/sound/soc/renesas/rcar/dma.c
+++ b/sound/soc/renesas/rcar/dma.c
@@ -194,14 +194,12 @@ struct dma_chan *rsnd_dma_request_channel(struct 
device_node *of_node, char *nam
        struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
        struct device *dev = rsnd_priv_to_dev(priv);
        struct dma_chan *chan = NULL;
-       struct device_node *np;
        int i = 0;
 
-       for_each_child_of_node(of_node, np) {
+       for_each_child_of_node_scoped(of_node, np) {
                i = rsnd_node_fixed_index(dev, np, name, i);
                if (i < 0) {
                        chan = NULL;
-                       of_node_put(np);
                        break;
                }
 
diff --git a/sound/soc/renesas/rcar/dvc.c b/sound/soc/renesas/rcar/dvc.c
index da91dd301aab..988cbddbc611 100644
--- a/sound/soc/renesas/rcar/dvc.c
+++ b/sound/soc/renesas/rcar/dvc.c
@@ -324,7 +324,6 @@ struct rsnd_mod *rsnd_dvc_mod_get(struct rsnd_priv *priv, 
int id)
 int rsnd_dvc_probe(struct rsnd_priv *priv)
 {
        struct device_node *node;
-       struct device_node *np;
        struct device *dev = rsnd_priv_to_dev(priv);
        struct rsnd_dvc *dvc;
        struct clk *clk;
@@ -352,7 +351,7 @@ int rsnd_dvc_probe(struct rsnd_priv *priv)
 
        i = 0;
        ret = 0;
-       for_each_child_of_node(node, np) {
+       for_each_child_of_node_scoped(node, np) {
                dvc = rsnd_dvc_get(priv, i);
 
                snprintf(name, RSND_DVC_NAME_SIZE, "%s.%d",
@@ -361,16 +360,13 @@ int rsnd_dvc_probe(struct rsnd_priv *priv)
                clk = devm_clk_get(dev, name);
                if (IS_ERR(clk)) {
                        ret = PTR_ERR(clk);
-                       of_node_put(np);
                        goto rsnd_dvc_probe_done;
                }
 
                ret = rsnd_mod_init(priv, rsnd_mod_get(dvc), &rsnd_dvc_ops,
                                    clk, RSND_MOD_DVC, i);
-               if (ret) {
-                       of_node_put(np);
+               if (ret)
                        goto rsnd_dvc_probe_done;
-               }
 
                i++;
        }
diff --git a/sound/soc/renesas/rcar/mix.c b/sound/soc/renesas/rcar/mix.c
index 024d91cc8748..aea74e703305 100644
--- a/sound/soc/renesas/rcar/mix.c
+++ b/sound/soc/renesas/rcar/mix.c
@@ -288,7 +288,6 @@ struct rsnd_mod *rsnd_mix_mod_get(struct rsnd_priv *priv, 
int id)
 int rsnd_mix_probe(struct rsnd_priv *priv)
 {
        struct device_node *node;
-       struct device_node *np;
        struct device *dev = rsnd_priv_to_dev(priv);
        struct rsnd_mix *mix;
        struct clk *clk;
@@ -316,7 +315,7 @@ int rsnd_mix_probe(struct rsnd_priv *priv)
 
        i = 0;
        ret = 0;
-       for_each_child_of_node(node, np) {
+       for_each_child_of_node_scoped(node, np) {
                mix = rsnd_mix_get(priv, i);
 
                snprintf(name, MIX_NAME_SIZE, "%s.%d",
@@ -325,16 +324,13 @@ int rsnd_mix_probe(struct rsnd_priv *priv)
                clk = devm_clk_get(dev, name);
                if (IS_ERR(clk)) {
                        ret = PTR_ERR(clk);
-                       of_node_put(np);
                        goto rsnd_mix_probe_done;
                }
 
                ret = rsnd_mod_init(priv, rsnd_mod_get(mix), &rsnd_mix_ops,
                                    clk, RSND_MOD_MIX, i);
-               if (ret) {
-                       of_node_put(np);
+               if (ret)
                        goto rsnd_mix_probe_done;
-               }
 
                i++;
        }
diff --git a/sound/soc/renesas/rcar/src.c b/sound/soc/renesas/rcar/src.c
index 7d73b183bda6..f47bf38c2f94 100644
--- a/sound/soc/renesas/rcar/src.c
+++ b/sound/soc/renesas/rcar/src.c
@@ -715,7 +715,6 @@ struct rsnd_mod *rsnd_src_mod_get(struct rsnd_priv *priv, 
int id)
 int rsnd_src_probe(struct rsnd_priv *priv)
 {
        struct device_node *node;
-       struct device_node *np;
        struct device *dev = rsnd_priv_to_dev(priv);
        struct rsnd_src *src;
        struct clk *clk;
@@ -742,14 +741,13 @@ int rsnd_src_probe(struct rsnd_priv *priv)
        priv->src       = src;
 
        i = 0;
-       for_each_child_of_node(node, np) {
+       for_each_child_of_node_scoped(node, np) {
                if (!of_device_is_available(np))
                        goto skip;
 
                i = rsnd_node_fixed_index(dev, np, SRC_NAME, i);
                if (i < 0) {
                        ret = -EINVAL;
-                       of_node_put(np);
                        goto rsnd_src_probe_done;
                }
 
@@ -761,23 +759,19 @@ int rsnd_src_probe(struct rsnd_priv *priv)
                src->irq = irq_of_parse_and_map(np, 0);
                if (!src->irq) {
                        ret = -EINVAL;
-                       of_node_put(np);
                        goto rsnd_src_probe_done;
                }
 
                clk = devm_clk_get(dev, name);
                if (IS_ERR(clk)) {
                        ret = PTR_ERR(clk);
-                       of_node_put(np);
                        goto rsnd_src_probe_done;
                }
 
                ret = rsnd_mod_init(priv, rsnd_mod_get(src),
                                    &rsnd_src_ops, clk, RSND_MOD_SRC, i);
-               if (ret) {
-                       of_node_put(np);
+               if (ret)
                        goto rsnd_src_probe_done;
-               }
 
 skip:
                i++;
diff --git a/sound/soc/renesas/rcar/ssi.c b/sound/soc/renesas/rcar/ssi.c
index 0c6424a1fcac..d52056caa3ec 100644
--- a/sound/soc/renesas/rcar/ssi.c
+++ b/sound/soc/renesas/rcar/ssi.c
@@ -1115,7 +1115,6 @@ void rsnd_parse_connect_ssi(struct rsnd_dai *rdai,
        struct rsnd_priv *priv = rsnd_rdai_to_priv(rdai);
        struct device *dev = rsnd_priv_to_dev(priv);
        struct device_node *node;
-       struct device_node *np;
        int i;
 
        node = rsnd_ssi_of_node(priv);
@@ -1123,14 +1122,12 @@ void rsnd_parse_connect_ssi(struct rsnd_dai *rdai,
                return;
 
        i = 0;
-       for_each_child_of_node(node, np) {
+       for_each_child_of_node_scoped(node, np) {
                struct rsnd_mod *mod;
 
                i = rsnd_node_fixed_index(dev, np, SSI_NAME, i);
-               if (i < 0) {
-                       of_node_put(np);
+               if (i < 0)
                        break;
-               }
 
                mod = rsnd_ssi_mod_get(priv, i);
 
@@ -1163,7 +1160,6 @@ int __rsnd_ssi_is_pin_sharing(struct rsnd_mod *mod)
 int rsnd_ssi_probe(struct rsnd_priv *priv)
 {
        struct device_node *node;
-       struct device_node *np;
        struct device *dev = rsnd_priv_to_dev(priv);
        struct rsnd_mod_ops *ops;
        struct clk *clk;
@@ -1191,14 +1187,13 @@ int rsnd_ssi_probe(struct rsnd_priv *priv)
        priv->ssi_nr    = nr;
 
        i = 0;
-       for_each_child_of_node(node, np) {
+       for_each_child_of_node_scoped(node, np) {
                if (!of_device_is_available(np))
                        goto skip;
 
                i = rsnd_node_fixed_index(dev, np, SSI_NAME, i);
                if (i < 0) {
                        ret = -EINVAL;
-                       of_node_put(np);
                        goto rsnd_ssi_probe_done;
                }
 
@@ -1210,7 +1205,6 @@ int rsnd_ssi_probe(struct rsnd_priv *priv)
                clk = devm_clk_get(dev, name);
                if (IS_ERR(clk)) {
                        ret = PTR_ERR(clk);
-                       of_node_put(np);
                        goto rsnd_ssi_probe_done;
                }
 
@@ -1223,7 +1217,6 @@ int rsnd_ssi_probe(struct rsnd_priv *priv)
                ssi->irq = irq_of_parse_and_map(np, 0);
                if (!ssi->irq) {
                        ret = -EINVAL;
-                       of_node_put(np);
                        goto rsnd_ssi_probe_done;
                }
 
@@ -1234,10 +1227,9 @@ int rsnd_ssi_probe(struct rsnd_priv *priv)
 
                ret = rsnd_mod_init(priv, rsnd_mod_get(ssi), ops, clk,
                                    RSND_MOD_SSI, i);
-               if (ret) {
-                       of_node_put(np);
+               if (ret)
                        goto rsnd_ssi_probe_done;
-               }
+
 skip:
                i++;
        }
diff --git a/sound/soc/renesas/rcar/ssiu.c b/sound/soc/renesas/rcar/ssiu.c
index 665e8b2db579..faf351126d57 100644
--- a/sound/soc/renesas/rcar/ssiu.c
+++ b/sound/soc/renesas/rcar/ssiu.c
@@ -478,17 +478,14 @@ void rsnd_parse_connect_ssiu(struct rsnd_dai *rdai,
 
        /* use rcar_sound,ssiu if exist */
        if (node) {
-               struct device_node *np;
                int i = 0;
 
-               for_each_child_of_node(node, np) {
+               for_each_child_of_node_scoped(node, np) {
                        struct rsnd_mod *mod;
 
                        i = rsnd_node_fixed_index(dev, np, SSIU_NAME, i);
-                       if (i < 0) {
-                               of_node_put(np);
+                       if (i < 0)
                                break;
-                       }
 
                        mod = rsnd_ssiu_mod_get(priv, i);
 
-- 
2.47.1


Reply via email to