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:
parent
11eefc0ac8
commit
8fa99c0035
@ -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);
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user