]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
leds: lgm-sso: Propagate error codes from callee to caller
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Thu, 5 Aug 2021 11:26:19 +0000 (14:26 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 15 Sep 2021 08:00:44 +0000 (10:00 +0200)
[ Upstream commit 9cbc861095375793a69858f91f3ac4e817f320f0 ]

The one of the latest change to the driver reveals the problem that
the error codes from callee aren't propagated to the caller of
__sso_led_dt_parse(). Fix this accordingly.

Fixes: 9999908ca1ab ("leds: lgm-sso: Put fwnode in any case during ->probe()")
Fixes: c3987cd2bca3 ("leds: lgm: Add LED controller driver for LGM SoC")
Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/leds/blink/leds-lgm-sso.c

index 6c0ffcaa6b5cf299f7355a105400690e9dd8726f..24736f29d3633db17e2a41cbf371cbe3d29ca731 100644 (file)
@@ -643,7 +643,7 @@ __sso_led_dt_parse(struct sso_led_priv *priv, struct fwnode_handle *fw_ssoled)
                                                              fwnode_child,
                                                              GPIOD_ASIS, NULL);
                if (IS_ERR(led->gpiod)) {
-                       dev_err_probe(dev, PTR_ERR(led->gpiod), "led: get gpio fail!\n");
+                       ret = dev_err_probe(dev, PTR_ERR(led->gpiod), "led: get gpio fail!\n");
                        goto __dt_err;
                }
 
@@ -663,8 +663,11 @@ __sso_led_dt_parse(struct sso_led_priv *priv, struct fwnode_handle *fw_ssoled)
                        desc->panic_indicator = 1;
 
                ret = fwnode_property_read_u32(fwnode_child, "reg", &prop);
-               if (ret != 0 || prop >= SSO_LED_MAX_NUM) {
+               if (ret)
+                       goto __dt_err;
+               if (prop >= SSO_LED_MAX_NUM) {
                        dev_err(dev, "invalid LED pin:%u\n", prop);
+                       ret = -EINVAL;
                        goto __dt_err;
                }
                desc->pin = prop;
@@ -700,7 +703,8 @@ __sso_led_dt_parse(struct sso_led_priv *priv, struct fwnode_handle *fw_ssoled)
                                desc->brightness = LED_FULL;
                }
 
-               if (sso_create_led(priv, led, fwnode_child))
+               ret = sso_create_led(priv, led, fwnode_child);
+               if (ret)
                        goto __dt_err;
        }
 
@@ -714,7 +718,7 @@ __dt_err:
                sso_led_shutdown(led);
        }
 
-       return -EINVAL;
+       return ret;
 }
 
 static int sso_led_dt_parse(struct sso_led_priv *priv)