Unverified Commit 2518a0e1 authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Mark Brown
Browse files

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: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Tested-by: default avatarStephen Gordon <gordoste@iinet.net.au>
Link: https://patch.msgid.link/87v7uso5js.wl-kuninori.morimoto.gx@renesas.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent c8a1dccf
Loading
Loading
Loading
Loading
+17 −41
Original line number Diff line number Diff line
@@ -120,14 +120,12 @@ static void simple_parse_convert(struct device *dev,
				 struct simple_util_data *adata)
{
	struct device_node *top = dev->of_node;
	struct device_node *node = of_get_parent(np);
	struct device_node *node __free(device_node) = of_get_parent(np);

	simple_util_parse_convert(top,  PREFIX, adata);
	simple_util_parse_convert(node, PREFIX, adata);
	simple_util_parse_convert(node, NULL,   adata);
	simple_util_parse_convert(np,   NULL,   adata);

	of_node_put(node);
}

static int simple_parse_node(struct simple_util_priv *priv,
@@ -176,7 +174,7 @@ static int simple_link_init(struct simple_util_priv *priv,
	struct device_node *top = dev->of_node;
	struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, li->link);
	struct simple_dai_props *dai_props = simple_priv_to_props(priv, li->link);
	struct device_node *node = of_get_parent(cpu);
	struct device_node *node __free(device_node) = of_get_parent(cpu);
	enum snd_soc_trigger_order trigger_start = SND_SOC_TRIGGER_ORDER_DEFAULT;
	enum snd_soc_trigger_order trigger_stop  = SND_SOC_TRIGGER_ORDER_DEFAULT;
	bool playback_only = 0, capture_only = 0;
@@ -185,7 +183,7 @@ static int simple_link_init(struct simple_util_priv *priv,
	ret = simple_util_parse_daifmt(dev, node, codec,
				       prefix, &dai_link->dai_fmt);
	if (ret < 0)
		goto init_end;
		return ret;

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

	ret = simple_util_set_dailink_name(dev, dai_link, name);
init_end:
	of_node_put(node);

	return ret;
	return simple_util_set_dailink_name(dev, dai_link, name);
}

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,
	struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, li->link);
	struct simple_dai_props *dai_props = simple_priv_to_props(priv, li->link);
	struct device_node *top = dev->of_node;
	struct device_node *node = of_get_parent(np);
	struct device_node *node __free(device_node) = of_get_parent(np);
	char *prefix = "";
	char dai_name[64];
	int ret;
@@ -296,7 +290,6 @@ static int simple_dai_link_of_dpcm(struct simple_util_priv *priv,
out_put_node:
	li->link++;

	of_node_put(node);
	return ret;
}

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

	cpu  = np;
	node = of_get_parent(np);
	struct device_node *node __free(device_node) = of_get_parent(np);

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

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

	snprintf(prop, sizeof(prop), "%splat", prefix);
	plat = of_get_child_by_name(node, prop);
	struct device_node *plat __free(device_node)  = of_get_child_by_name(node, prop);

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

dai_link_of_err:
	of_node_put(plat);
	of_node_put(node);

	li->link++;

	return ret;
@@ -374,7 +362,6 @@ 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;
	uintptr_t dpcm_selectable = (uintptr_t)of_device_get_match_data(dev);
	bool is_top = 0;
	int ret = 0;
@@ -386,14 +373,11 @@ static int __simple_for_each_link(struct simple_util_priv *priv,
		is_top = 1;
	}

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

	/* loop for all dai-link */
	do {
		struct simple_util_data adata;
		struct device_node *codec;
		struct device_node *plat;
		struct device_node *np;
		int num = of_get_child_count(node);

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

		/* get codec */
		codec = of_get_child_by_name(node, is_top ?
					     PREFIX "codec" : "codec");
		struct device_node *codec __free(device_node) =
			of_get_child_by_name(node, is_top ? PREFIX "codec" : "codec");
		if (!codec) {
			ret = -ENODEV;
			goto error;
		}
		/* get platform */
		plat = of_get_child_by_name(node, is_top ?
					    PREFIX "plat" : "plat");
		struct device_node *plat __free(device_node) =
			of_get_child_by_name(node, is_top ? PREFIX "plat" : "plat");

		/* 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;
			/*
@@ -452,22 +436,16 @@ 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);
			if (ret < 0)
				goto error;
		}
		}

		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;
}

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

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

	ret = of_platform_populate(node, NULL, NULL, dev);
	of_node_put(node);
	if (ret)
		return ret;