leds: spi-byte: Call of_node_put() on error path
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Thu, 6 Jun 2024 17:29:18 +0000 (20:29 +0300)
committerLee Jones <lee@kernel.org>
Wed, 26 Jun 2024 15:56:03 +0000 (16:56 +0100)
Add a missing call to of_node_put(np) on error.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20240606173037.3091598-2-andriy.shevchenko@linux.intel.com
Signed-off-by: Lee Jones <lee@kernel.org>
drivers/leds/leds-spi-byte.c

index 96296db5f410dec9cc04e5b6b3ca91221bd82623..b04cf502e60351192dca11c77cbc8c114f226ec0 100644 (file)
@@ -91,7 +91,6 @@ static int spi_byte_probe(struct spi_device *spi)
                dev_err(dev, "Device must have exactly one LED sub-node.");
                return -EINVAL;
        }
-       child = of_get_next_available_child(dev_of_node(dev), NULL);
 
        led = devm_kzalloc(dev, sizeof(*led), GFP_KERNEL);
        if (!led)
@@ -104,11 +103,13 @@ static int spi_byte_probe(struct spi_device *spi)
        led->ldev.max_brightness = led->cdef->max_value - led->cdef->off_value;
        led->ldev.brightness_set_blocking = spi_byte_brightness_set_blocking;
 
+       child = of_get_next_available_child(dev_of_node(dev), NULL);
        state = of_get_property(child, "default-state", NULL);
        if (state) {
                if (!strcmp(state, "on")) {
                        led->ldev.brightness = led->ldev.max_brightness;
                } else if (strcmp(state, "off")) {
+                       of_node_put(child);
                        /* all other cases except "off" */
                        dev_err(dev, "default-state can only be 'on' or 'off'");
                        return -EINVAL;
@@ -123,9 +124,12 @@ static int spi_byte_probe(struct spi_device *spi)
 
        ret = devm_led_classdev_register_ext(&spi->dev, &led->ldev, &init_data);
        if (ret) {
+               of_node_put(child);
                mutex_destroy(&led->mutex);
                return ret;
        }
+
+       of_node_put(child);
        spi_set_drvdata(spi, led);
 
        return 0;