@@ -6,6 +6,7 @@
* Copyright (C) 2015-2017 Glider bvba
*/
+#include <linux/cleanup.h>
#include <linux/clk/renesas.h>
#include <linux/delay.h>
#include <linux/err.h>
@@ -348,12 +349,12 @@ static int __init rcar_sysc_pd_init(void)
const struct rcar_sysc_info *info;
const struct of_device_id *match;
struct rcar_pm_domains *domains;
- struct device_node *np;
void __iomem *base;
unsigned int i;
int error;
- np = of_find_matching_node_and_match(NULL, rcar_sysc_matches, &match);
+ struct device_node *np __free(device_node) =
+ of_find_matching_node_and_match(NULL, rcar_sysc_matches, &match);
if (!np)
return -ENODEV;
@@ -362,7 +363,7 @@ static int __init rcar_sysc_pd_init(void)
if (info->init) {
error = info->init();
if (error)
- goto out_put;
+ return error;
}
has_cpg_mstp = of_find_compatible_node(NULL, NULL,
@@ -371,8 +372,7 @@ static int __init rcar_sysc_pd_init(void)
base = of_iomap(np, 0);
if (!base) {
pr_warn("%pOF: Cannot map regs\n", np);
- error = -ENOMEM;
- goto out_put;
+ return -ENOMEM;
}
rcar_sysc_base = base;
@@ -382,10 +382,8 @@ static int __init rcar_sysc_pd_init(void)
rcar_sysc_extmask_val = info->extmask_val;
domains = kzalloc(sizeof(*domains), GFP_KERNEL);
- if (!domains) {
- error = -ENOMEM;
- goto out_put;
- }
+ if (!domains)
+ return -ENOMEM;
domains->onecell_data.domains = domains->domains;
domains->onecell_data.num_domains = ARRAY_SIZE(domains->domains);
@@ -403,10 +401,8 @@ static int __init rcar_sysc_pd_init(void)
n = strlen(area->name) + 1;
pd = kzalloc(sizeof(*pd) + n, GFP_KERNEL);
- if (!pd) {
- error = -ENOMEM;
- goto out_put;
- }
+ if (!pd)
+ return -ENOMEM;
memcpy(pd->name, area->name, n);
pd->genpd.name = pd->name;
@@ -417,7 +413,7 @@ static int __init rcar_sysc_pd_init(void)
error = rcar_sysc_pd_setup(pd);
if (error)
- goto out_put;
+ return error;
domains->domains[area->isr_bit] = &pd->genpd;
@@ -429,7 +425,7 @@ static int __init rcar_sysc_pd_init(void)
if (error) {
pr_warn("Failed to add PM subdomain %s to parent %u\n",
area->name, area->parent);
- goto out_put;
+ return error;
}
}
@@ -437,8 +433,6 @@ static int __init rcar_sysc_pd_init(void)
if (!error)
fwnode_dev_initialized(of_fwnode_handle(np), true);
-out_put:
- of_node_put(np);
return error;
}
early_initcall(rcar_sysc_pd_init);
Obtain the device node reference with scoped/cleanup.h to reduce error handling and make the code a bit simpler. Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> --- drivers/pmdomain/renesas/rcar-sysc.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-)