[PATCH] ASoC: simple-card: Use scoped of_node_put() to simplify code logic

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



Use scope based of_node_put() to simplify the code logic, and we don't
need to call of_node_put(). This can simplify code logic a bit.

Signed-off-by: Zhang Zekun <zhangzekun11@xxxxxxxxxx>
---
 sound/soc/generic/simple-card.c | 28 +++++++++-------------------
 1 file changed, 9 insertions(+), 19 deletions(-)

diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c
index d2588f1ea54e..60a09ee5b159 100644
--- a/sound/soc/generic/simple-card.c
+++ b/sound/soc/generic/simple-card.c
@@ -375,8 +375,8 @@ static int __simple_for_each_link(struct simple_util_priv *priv,
 {
 	struct device *dev = simple_priv_to_dev(priv);
 	struct device_node *top = dev->of_node;
-	struct device_node *node;
-	struct device_node *add_devs;
+	struct device_node *node __free(device_node) = NULL;
+	struct device_node *add_devs __free(device_node) = NULL;
 	uintptr_t dpcm_selectable = (uintptr_t)of_device_get_match_data(dev);
 	bool is_top = 0;
 	int ret = 0;
@@ -393,9 +393,8 @@ static int __simple_for_each_link(struct simple_util_priv *priv,
 	/* loop for all dai-link */
 	do {
 		struct simple_util_data adata;
-		struct device_node *codec;
-		struct device_node *plat;
-		struct device_node *np;
+		struct device_node *codec __free(device_node) = NULL;
+		struct device_node *plat __free(device_node) = NULL;
 		int num = of_get_child_count(node);
 
 		/* Skip additional-devs node */
@@ -409,7 +408,7 @@ static int __simple_for_each_link(struct simple_util_priv *priv,
 					     PREFIX "codec" : "codec");
 		if (!codec) {
 			ret = -ENODEV;
-			goto error;
+			return ret;
 		}
 		/* get platform */
 		plat = of_get_child_by_name(node, is_top ?
@@ -417,14 +416,14 @@ static int __simple_for_each_link(struct simple_util_priv *priv,
 
 		/* get convert-xxx property */
 		memset(&adata, 0, sizeof(adata));
-		for_each_child_of_node(node, np) {
+		for_each_child_of_node_scoped(node, np) {
 			if (np == add_devs)
 				continue;
 			simple_parse_convert(dev, np, &adata);
 		}
 
 		/* loop for all CPU/Codec node */
-		for_each_child_of_node(node, np) {
+		for_each_child_of_node_scoped(node, np) {
 			if (plat == np || add_devs == np)
 				continue;
 			/*
@@ -454,22 +453,13 @@ static int __simple_for_each_link(struct simple_util_priv *priv,
 					ret = func_noml(priv, np, codec, li, is_top);
 			}
 
-			if (ret < 0) {
-				of_node_put(codec);
-				of_node_put(plat);
-				of_node_put(np);
-				goto error;
-			}
+			if (ret < 0)
+				return ret;
 		}
 
-		of_node_put(codec);
-		of_node_put(plat);
 		node = of_get_next_child(top, node);
 	} while (!is_top && node);
 
- error:
-	of_node_put(add_devs);
-	of_node_put(node);
 	return ret;
 }
 
-- 
2.17.1





[Index of Archives]     [Pulseaudio]     [Linux Audio Users]     [ALSA Devel]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]

  Powered by Linux