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)
committerPavel Machek <pavel@ucw.cz>
Sat, 7 Aug 2021 07:12:45 +0000 (09:12 +0200)
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>
drivers/leds/blink/leds-lgm-sso.c

index e47c47e421d6106797f9d4af2d625c0ccf2d023a..fd8b7573285adc84dd325ac3d2e357cd150e70d6 100644 (file)
@@ -640,7 +640,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;
                }
 
@@ -660,8 +660,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;
@@ -697,7 +700,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;
        }
 
@@ -709,7 +713,7 @@ __dt_err:
        list_for_each_entry(led, &priv->led_list, list)
                sso_led_shutdown(led);
 
-       return -EINVAL;
+       return ret;
 }
 
 static int sso_led_dt_parse(struct sso_led_priv *priv)