Commit cb3cb99a authored by Peng Fan's avatar Peng Fan Committed by Linus Walleij
Browse files

pinctrl: freescale: Use scope based of_node_put() cleanups



Use scope based of_node_put() cleanup to simplify code.

Signed-off-by: default avatarPeng Fan <peng.fan@nxp.com>
Reviewed-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
Link: https://lore.kernel.org/20240627131721.678727-4-peng.fan@oss.nxp.com


Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 2677d53d
Loading
Loading
Loading
Loading
+7 −18
Original line number Diff line number Diff line
@@ -580,7 +580,6 @@ static int imx_pinctrl_parse_functions(struct device_node *np,
				       u32 index)
{
	struct pinctrl_dev *pctl = ipctl->pctl;
	struct device_node *child;
	struct function_desc *func;
	struct group_desc *grp;
	const char **group_names;
@@ -605,17 +604,15 @@ static int imx_pinctrl_parse_functions(struct device_node *np,
	if (!group_names)
		return -ENOMEM;
	i = 0;
	for_each_child_of_node(np, child)
	for_each_child_of_node_scoped(np, child)
		group_names[i++] = child->name;
	func->func.groups = group_names;

	i = 0;
	for_each_child_of_node(np, child) {
	for_each_child_of_node_scoped(np, child) {
		grp = devm_kzalloc(ipctl->dev, sizeof(*grp), GFP_KERNEL);
		if (!grp) {
			of_node_put(child);
		if (!grp)
			return -ENOMEM;
		}

		mutex_lock(&ipctl->mutex);
		radix_tree_insert(&pctl->pin_group_tree,
@@ -635,23 +632,15 @@ static int imx_pinctrl_parse_functions(struct device_node *np,
 */
static bool imx_pinctrl_dt_is_flat_functions(struct device_node *np)
{
	struct device_node *function_np;
	struct device_node *pinctrl_np;

	for_each_child_of_node(np, function_np) {
		if (of_property_read_bool(function_np, "fsl,pins")) {
			of_node_put(function_np);
	for_each_child_of_node_scoped(np, function_np) {
		if (of_property_read_bool(function_np, "fsl,pins"))
			return true;
		}

		for_each_child_of_node(function_np, pinctrl_np) {
			if (of_property_read_bool(pinctrl_np, "fsl,pins")) {
				of_node_put(pinctrl_np);
				of_node_put(function_np);
		for_each_child_of_node_scoped(function_np, pinctrl_np) {
			if (of_property_read_bool(pinctrl_np, "fsl,pins"))
				return false;
		}
	}
	}

	return true;
}
+5 −11
Original line number Diff line number Diff line
@@ -508,7 +508,6 @@ static int imx1_pinctrl_parse_functions(struct device_node *np,
				       struct imx1_pinctrl_soc_info *info,
				       u32 index)
{
	struct device_node *child;
	struct imx1_pmx_func *func;
	struct imx1_pin_group *grp;
	int ret;
@@ -531,15 +530,13 @@ static int imx1_pinctrl_parse_functions(struct device_node *np,
	if (!func->groups)
		return -ENOMEM;

	for_each_child_of_node(np, child) {
	for_each_child_of_node_scoped(np, child) {
		func->groups[i] = child->name;
		grp = &info->groups[grp_index++];
		ret = imx1_pinctrl_parse_groups(child, grp, info, i++);
		if (ret == -ENOMEM) {
			of_node_put(child);
		if (ret == -ENOMEM)
			return ret;
	}
	}

	return 0;
}
@@ -548,7 +545,6 @@ static int imx1_pinctrl_parse_dt(struct platform_device *pdev,
		struct imx1_pinctrl *pctl, struct imx1_pinctrl_soc_info *info)
{
	struct device_node *np = pdev->dev.of_node;
	struct device_node *child;
	int ret;
	u32 nfuncs = 0;
	u32 ngroups = 0;
@@ -557,7 +553,7 @@ static int imx1_pinctrl_parse_dt(struct platform_device *pdev,
	if (!np)
		return -ENODEV;

	for_each_child_of_node(np, child) {
	for_each_child_of_node_scoped(np, child) {
		++nfuncs;
		ngroups += of_get_child_count(child);
	}
@@ -579,13 +575,11 @@ static int imx1_pinctrl_parse_dt(struct platform_device *pdev,
	if (!info->functions || !info->groups)
		return -ENOMEM;

	for_each_child_of_node(np, child) {
	for_each_child_of_node_scoped(np, child) {
		ret = imx1_pinctrl_parse_functions(child, info, ifunc++);
		if (ret == -ENOMEM) {
			of_node_put(child);
		if (ret == -ENOMEM)
			return -ENOMEM;
	}
	}

	return 0;
}
+4 −10
Original line number Diff line number Diff line
@@ -490,16 +490,14 @@ static int mxs_pinctrl_probe_dt(struct platform_device *pdev,
	/* Get groups for each function */
	idxf = 0;
	fn = fnull;
	for_each_child_of_node(np, child) {
	for_each_child_of_node_scoped(np, child) {
		if (is_mxs_gpio(child))
			continue;
		if (of_property_read_u32(child, "reg", &val)) {
			ret = mxs_pinctrl_parse_group(pdev, child,
						      idxg++, NULL);
			if (ret) {
				of_node_put(child);
			if (ret)
				return ret;
			}
			continue;
		}

@@ -509,20 +507,16 @@ static int mxs_pinctrl_probe_dt(struct platform_device *pdev,
						 f->ngroups,
						 sizeof(*f->groups),
						 GFP_KERNEL);
			if (!f->groups) {
				of_node_put(child);
			if (!f->groups)
				return -ENOMEM;
			}
			fn = child->name;
			i = 0;
		}
		ret = mxs_pinctrl_parse_group(pdev, child, idxg++,
					      &f->groups[i++]);
		if (ret) {
			of_node_put(child);
		if (ret)
			return ret;
	}
	}

	return 0;
}