1

pinctrl: starfive: Use scope based of_node_put() cleanups

Use scope based of_node_put() cleanup to simplify code.

Acked-by: Emil Renner Berthing <emil.renner.berthing@canonical.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
Link: https://lore.kernel.org/20240504-pinctrl-cleanup-v2-4-26c5f2dc1181@nxp.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
Peng Fan 2024-05-04 21:20:02 +08:00 committed by Linus Walleij
parent 11eefc0ac8
commit 8fa99c0035
2 changed files with 19 additions and 26 deletions

View File

@ -480,7 +480,6 @@ static int starfive_dt_node_to_map(struct pinctrl_dev *pctldev,
{ {
struct starfive_pinctrl *sfp = pinctrl_dev_get_drvdata(pctldev); struct starfive_pinctrl *sfp = pinctrl_dev_get_drvdata(pctldev);
struct device *dev = sfp->gc.parent; struct device *dev = sfp->gc.parent;
struct device_node *child;
struct pinctrl_map *map; struct pinctrl_map *map;
const char **pgnames; const char **pgnames;
const char *grpname; const char *grpname;
@ -492,20 +491,18 @@ static int starfive_dt_node_to_map(struct pinctrl_dev *pctldev,
nmaps = 0; nmaps = 0;
ngroups = 0; ngroups = 0;
for_each_available_child_of_node(np, child) { for_each_available_child_of_node_scoped(np, child) {
int npinmux = of_property_count_u32_elems(child, "pinmux"); int npinmux = of_property_count_u32_elems(child, "pinmux");
int npins = of_property_count_u32_elems(child, "pins"); int npins = of_property_count_u32_elems(child, "pins");
if (npinmux > 0 && npins > 0) { if (npinmux > 0 && npins > 0) {
dev_err(dev, "invalid pinctrl group %pOFn.%pOFn: both pinmux and pins set\n", dev_err(dev, "invalid pinctrl group %pOFn.%pOFn: both pinmux and pins set\n",
np, child); np, child);
of_node_put(child);
return -EINVAL; return -EINVAL;
} }
if (npinmux == 0 && npins == 0) { if (npinmux == 0 && npins == 0) {
dev_err(dev, "invalid pinctrl group %pOFn.%pOFn: neither pinmux nor pins set\n", dev_err(dev, "invalid pinctrl group %pOFn.%pOFn: neither pinmux nor pins set\n",
np, child); np, child);
of_node_put(child);
return -EINVAL; return -EINVAL;
} }
@ -527,14 +524,14 @@ static int starfive_dt_node_to_map(struct pinctrl_dev *pctldev,
nmaps = 0; nmaps = 0;
ngroups = 0; ngroups = 0;
mutex_lock(&sfp->mutex); mutex_lock(&sfp->mutex);
for_each_available_child_of_node(np, child) { for_each_available_child_of_node_scoped(np, child) {
int npins; int npins;
int i; int i;
grpname = devm_kasprintf(dev, GFP_KERNEL, "%pOFn.%pOFn", np, child); grpname = devm_kasprintf(dev, GFP_KERNEL, "%pOFn.%pOFn", np, child);
if (!grpname) { if (!grpname) {
ret = -ENOMEM; ret = -ENOMEM;
goto put_child; goto free_map;
} }
pgnames[ngroups++] = grpname; pgnames[ngroups++] = grpname;
@ -543,18 +540,18 @@ static int starfive_dt_node_to_map(struct pinctrl_dev *pctldev,
pins = devm_kcalloc(dev, npins, sizeof(*pins), GFP_KERNEL); pins = devm_kcalloc(dev, npins, sizeof(*pins), GFP_KERNEL);
if (!pins) { if (!pins) {
ret = -ENOMEM; ret = -ENOMEM;
goto put_child; goto free_map;
} }
pinmux = devm_kcalloc(dev, npins, sizeof(*pinmux), GFP_KERNEL); pinmux = devm_kcalloc(dev, npins, sizeof(*pinmux), GFP_KERNEL);
if (!pinmux) { if (!pinmux) {
ret = -ENOMEM; ret = -ENOMEM;
goto put_child; goto free_map;
} }
ret = of_property_read_u32_array(child, "pinmux", pinmux, npins); ret = of_property_read_u32_array(child, "pinmux", pinmux, npins);
if (ret) if (ret)
goto put_child; goto free_map;
for (i = 0; i < npins; i++) { for (i = 0; i < npins; i++) {
unsigned int gpio = starfive_pinmux_to_gpio(pinmux[i]); unsigned int gpio = starfive_pinmux_to_gpio(pinmux[i]);
@ -570,7 +567,7 @@ static int starfive_dt_node_to_map(struct pinctrl_dev *pctldev,
pins = devm_kcalloc(dev, npins, sizeof(*pins), GFP_KERNEL); pins = devm_kcalloc(dev, npins, sizeof(*pins), GFP_KERNEL);
if (!pins) { if (!pins) {
ret = -ENOMEM; ret = -ENOMEM;
goto put_child; goto free_map;
} }
pinmux = NULL; pinmux = NULL;
@ -580,18 +577,18 @@ static int starfive_dt_node_to_map(struct pinctrl_dev *pctldev,
ret = of_property_read_u32_index(child, "pins", i, &v); ret = of_property_read_u32_index(child, "pins", i, &v);
if (ret) if (ret)
goto put_child; goto free_map;
pins[i] = v; pins[i] = v;
} }
} else { } else {
ret = -EINVAL; ret = -EINVAL;
goto put_child; goto free_map;
} }
ret = pinctrl_generic_add_group(pctldev, grpname, pins, npins, pinmux); ret = pinctrl_generic_add_group(pctldev, grpname, pins, npins, pinmux);
if (ret < 0) { if (ret < 0) {
dev_err(dev, "error adding group %s: %d\n", grpname, ret); dev_err(dev, "error adding group %s: %d\n", grpname, ret);
goto put_child; goto free_map;
} }
ret = pinconf_generic_parse_dt_config(child, pctldev, ret = pinconf_generic_parse_dt_config(child, pctldev,
@ -600,7 +597,7 @@ static int starfive_dt_node_to_map(struct pinctrl_dev *pctldev,
if (ret) { if (ret) {
dev_err(dev, "error parsing pin config of group %s: %d\n", dev_err(dev, "error parsing pin config of group %s: %d\n",
grpname, ret); grpname, ret);
goto put_child; goto free_map;
} }
/* don't create a map if there are no pinconf settings */ /* don't create a map if there are no pinconf settings */
@ -623,8 +620,6 @@ static int starfive_dt_node_to_map(struct pinctrl_dev *pctldev,
mutex_unlock(&sfp->mutex); mutex_unlock(&sfp->mutex);
return 0; return 0;
put_child:
of_node_put(child);
free_map: free_map:
pinctrl_utils_free_map(pctldev, map, nmaps); pinctrl_utils_free_map(pctldev, map, nmaps);
mutex_unlock(&sfp->mutex); mutex_unlock(&sfp->mutex);

View File

@ -150,7 +150,7 @@ static int jh7110_dt_node_to_map(struct pinctrl_dev *pctldev,
nmaps = 0; nmaps = 0;
ngroups = 0; ngroups = 0;
mutex_lock(&sfp->mutex); mutex_lock(&sfp->mutex);
for_each_available_child_of_node(np, child) { for_each_available_child_of_node_scoped(np, child) {
int npins = of_property_count_u32_elems(child, "pinmux"); int npins = of_property_count_u32_elems(child, "pinmux");
int *pins; int *pins;
u32 *pinmux; u32 *pinmux;
@ -161,13 +161,13 @@ static int jh7110_dt_node_to_map(struct pinctrl_dev *pctldev,
"invalid pinctrl group %pOFn.%pOFn: pinmux not set\n", "invalid pinctrl group %pOFn.%pOFn: pinmux not set\n",
np, child); np, child);
ret = -EINVAL; ret = -EINVAL;
goto put_child; goto free_map;
} }
grpname = devm_kasprintf(dev, GFP_KERNEL, "%pOFn.%pOFn", np, child); grpname = devm_kasprintf(dev, GFP_KERNEL, "%pOFn.%pOFn", np, child);
if (!grpname) { if (!grpname) {
ret = -ENOMEM; ret = -ENOMEM;
goto put_child; goto free_map;
} }
pgnames[ngroups++] = grpname; pgnames[ngroups++] = grpname;
@ -175,18 +175,18 @@ static int jh7110_dt_node_to_map(struct pinctrl_dev *pctldev,
pins = devm_kcalloc(dev, npins, sizeof(*pins), GFP_KERNEL); pins = devm_kcalloc(dev, npins, sizeof(*pins), GFP_KERNEL);
if (!pins) { if (!pins) {
ret = -ENOMEM; ret = -ENOMEM;
goto put_child; goto free_map;
} }
pinmux = devm_kcalloc(dev, npins, sizeof(*pinmux), GFP_KERNEL); pinmux = devm_kcalloc(dev, npins, sizeof(*pinmux), GFP_KERNEL);
if (!pinmux) { if (!pinmux) {
ret = -ENOMEM; ret = -ENOMEM;
goto put_child; goto free_map;
} }
ret = of_property_read_u32_array(child, "pinmux", pinmux, npins); ret = of_property_read_u32_array(child, "pinmux", pinmux, npins);
if (ret) if (ret)
goto put_child; goto free_map;
for (i = 0; i < npins; i++) for (i = 0; i < npins; i++)
pins[i] = jh7110_pinmux_pin(pinmux[i]); pins[i] = jh7110_pinmux_pin(pinmux[i]);
@ -200,7 +200,7 @@ static int jh7110_dt_node_to_map(struct pinctrl_dev *pctldev,
pins, npins, pinmux); pins, npins, pinmux);
if (ret < 0) { if (ret < 0) {
dev_err(dev, "error adding group %s: %d\n", grpname, ret); dev_err(dev, "error adding group %s: %d\n", grpname, ret);
goto put_child; goto free_map;
} }
ret = pinconf_generic_parse_dt_config(child, pctldev, ret = pinconf_generic_parse_dt_config(child, pctldev,
@ -209,7 +209,7 @@ static int jh7110_dt_node_to_map(struct pinctrl_dev *pctldev,
if (ret) { if (ret) {
dev_err(dev, "error parsing pin config of group %s: %d\n", dev_err(dev, "error parsing pin config of group %s: %d\n",
grpname, ret); grpname, ret);
goto put_child; goto free_map;
} }
/* don't create a map if there are no pinconf settings */ /* don't create a map if there are no pinconf settings */
@ -233,8 +233,6 @@ static int jh7110_dt_node_to_map(struct pinctrl_dev *pctldev,
*num_maps = nmaps; *num_maps = nmaps;
return 0; return 0;
put_child:
of_node_put(child);
free_map: free_map:
pinctrl_utils_free_map(pctldev, map, nmaps); pinctrl_utils_free_map(pctldev, map, nmaps);
mutex_unlock(&sfp->mutex); mutex_unlock(&sfp->mutex);