Merge tag 'rpmsg-v4.9' of git://github.com/andersson/remoteproc
[cascardo/linux.git] / drivers / leds / leds-gpio.c
index 171ba2f..d400dca 100644 (file)
@@ -139,7 +139,7 @@ static int create_gpio_led(const struct gpio_led *template,
        if (ret < 0)
                return ret;
 
-       return led_classdev_register(parent, &led_dat->cdev);
+       return devm_led_classdev_register(parent, &led_dat->cdev);
 }
 
 struct gpio_leds_priv {
@@ -177,20 +177,17 @@ static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev)
                led.gpiod = devm_get_gpiod_from_child(dev, NULL, child);
                if (IS_ERR(led.gpiod)) {
                        fwnode_handle_put(child);
-                       ret = PTR_ERR(led.gpiod);
-                       goto err;
+                       return ERR_CAST(led.gpiod);
                }
 
-               if (fwnode_property_present(child, "label")) {
-                       fwnode_property_read_string(child, "label", &led.name);
-               } else {
-                       if (IS_ENABLED(CONFIG_OF) && !led.name && np)
-                               led.name = np->name;
-                       if (!led.name) {
-                               ret = -EINVAL;
-                               goto err;
-                       }
+               ret = fwnode_property_read_string(child, "label", &led.name);
+               if (ret && IS_ENABLED(CONFIG_OF) && np)
+                       led.name = np->name;
+               if (!led.name) {
+                       fwnode_handle_put(child);
+                       return ERR_PTR(-EINVAL);
                }
+
                fwnode_property_read_string(child, "linux,default-trigger",
                                            &led.default_trigger);
 
@@ -212,18 +209,13 @@ static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev)
                ret = create_gpio_led(&led, led_dat, dev, NULL);
                if (ret < 0) {
                        fwnode_handle_put(child);
-                       goto err;
+                       return ERR_PTR(ret);
                }
                led_dat->cdev.dev->of_node = np;
                priv->num_leds++;
        }
 
        return priv;
-
-err:
-       for (count = priv->num_leds - 1; count >= 0; count--)
-               led_classdev_unregister(&priv->leds[count].cdev);
-       return ERR_PTR(ret);
 }
 
 static const struct of_device_id of_gpio_leds_match[] = {
@@ -251,13 +243,8 @@ static int gpio_led_probe(struct platform_device *pdev)
                        ret = create_gpio_led(&pdata->leds[i],
                                              &priv->leds[i],
                                              &pdev->dev, pdata->gpio_blink_set);
-                       if (ret < 0) {
-                               /* On failure: unwind the led creations */
-                               for (i = i - 1; i >= 0; i--)
-                                       led_classdev_unregister(
-                                                       &priv->leds[i].cdev);
+                       if (ret < 0)
                                return ret;
-                       }
                }
        } else {
                priv = gpio_leds_create(pdev);
@@ -270,17 +257,6 @@ static int gpio_led_probe(struct platform_device *pdev)
        return 0;
 }
 
-static int gpio_led_remove(struct platform_device *pdev)
-{
-       struct gpio_leds_priv *priv = platform_get_drvdata(pdev);
-       int i;
-
-       for (i = 0; i < priv->num_leds; i++)
-               led_classdev_unregister(&priv->leds[i].cdev);
-
-       return 0;
-}
-
 static void gpio_led_shutdown(struct platform_device *pdev)
 {
        struct gpio_leds_priv *priv = platform_get_drvdata(pdev);
@@ -295,7 +271,6 @@ static void gpio_led_shutdown(struct platform_device *pdev)
 
 static struct platform_driver gpio_led_driver = {
        .probe          = gpio_led_probe,
-       .remove         = gpio_led_remove,
        .shutdown       = gpio_led_shutdown,
        .driver         = {
                .name   = "leds-gpio",