mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 18:43:33 +02:00
ASoC: renesas: Use helper function for_each_child_of_node_scoped()
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. Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Ai Chao <aichao@kylinos.cn> Link: https://patch.msgid.link/20250603055109.3154061-3-aichao@kylinos.cn Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
19272b37aa
commit
077caf1d17
|
|
@ -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,7 +1263,7 @@ static int rsnd_dai_of_node(struct rsnd_priv *priv, int *is_graph)
|
|||
|
||||
of_node_put(node);
|
||||
|
||||
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;
|
||||
|
||||
|
|
@ -1279,7 +1272,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(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;
|
||||
}
|
||||
}
|
||||
|
|
@ -1505,10 +1496,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;
|
||||
|
|
@ -1525,14 +1515,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);
|
||||
|
|
|
|||
|
|
@ -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++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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++;
|
||||
|
|
|
|||
|
|
@ -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++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user