]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
leds: mc13783: Use scoped device node handling to simplify error paths
authorKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Fri, 16 Aug 2024 15:31:43 +0000 (17:31 +0200)
committerLee Jones <lee@kernel.org>
Thu, 22 Aug 2024 13:23:07 +0000 (14:23 +0100)
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>
Link: https://lore.kernel.org/r/20240816-cleanup-h-of-node-put-var-v1-11-1d0292802470@linaro.org
Signed-off-by: Lee Jones <lee@kernel.org>
drivers/leds/leds-mc13783.c

index bbd1d359bba47cff9ce5cd3c1c71c43ed2c2f644..da99d114bfb2123ed8f13bea61fad8abe651381b 100644 (file)
@@ -12,6 +12,7 @@
  *      Eric Miao <eric.miao@marvell.com>
  */
 
+#include <linux/cleanup.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/platform_device.h>
@@ -113,7 +114,7 @@ static struct mc13xxx_leds_platform_data __init *mc13xxx_led_probe_dt(
 {
        struct mc13xxx_leds *leds = platform_get_drvdata(pdev);
        struct mc13xxx_leds_platform_data *pdata;
-       struct device_node *parent, *child;
+       struct device_node *child;
        struct device *dev = &pdev->dev;
        int i = 0, ret = -ENODATA;
 
@@ -121,24 +122,23 @@ static struct mc13xxx_leds_platform_data __init *mc13xxx_led_probe_dt(
        if (!pdata)
                return ERR_PTR(-ENOMEM);
 
-       parent = of_get_child_by_name(dev_of_node(dev->parent), "leds");
+       struct device_node *parent __free(device_node) =
+               of_get_child_by_name(dev_of_node(dev->parent), "leds");
        if (!parent)
-               goto out_node_put;
+               return ERR_PTR(-ENODATA);
 
        ret = of_property_read_u32_array(parent, "led-control",
                                         pdata->led_control,
                                         leds->devtype->num_regs);
        if (ret)
-               goto out_node_put;
+               return ERR_PTR(ret);
 
        pdata->num_leds = of_get_available_child_count(parent);
 
        pdata->led = devm_kcalloc(dev, pdata->num_leds, sizeof(*pdata->led),
                                  GFP_KERNEL);
-       if (!pdata->led) {
-               ret = -ENOMEM;
-               goto out_node_put;
-       }
+       if (!pdata->led)
+               return ERR_PTR(-ENOMEM);
 
        for_each_available_child_of_node(parent, child) {
                const char *str;
@@ -158,12 +158,10 @@ static struct mc13xxx_leds_platform_data __init *mc13xxx_led_probe_dt(
        }
 
        pdata->num_leds = i;
-       ret = i > 0 ? 0 : -ENODATA;
-
-out_node_put:
-       of_node_put(parent);
+       if (i <= 0)
+               return ERR_PTR(-ENODATA);
 
-       return ret ? ERR_PTR(ret) : pdata;
+       return pdata;
 }
 #else
 static inline struct mc13xxx_leds_platform_data __init *mc13xxx_led_probe_dt(