leds: convert Network Space v2 LED driver to devm_kzalloc() and cleanup error exit...
authorBryan Wu <bryan.wu@canonical.com>
Wed, 4 Jul 2012 04:30:50 +0000 (12:30 +0800)
committerBryan Wu <bryan.wu@canonical.com>
Mon, 23 Jul 2012 23:52:40 +0000 (07:52 +0800)
Cc: Simon Guinot <sguinot@lacie.com>
Signed-off-by: Bryan Wu <bryan.wu@canonical.com>
drivers/leds/leds-ns2.c

index 01cf89ec6944e8bb31be8ac4d524eea91957de34..10528dafb043d62f1de2462d88f75c980942909a 100644 (file)
@@ -273,29 +273,23 @@ static int __devinit ns2_led_probe(struct platform_device *pdev)
        if (!pdata)
                return -EINVAL;
 
-       leds_data = kzalloc(sizeof(struct ns2_led_data) *
+       leds_data = devm_kzalloc(&pdev->dev, sizeof(struct ns2_led_data) *
                            pdata->num_leds, GFP_KERNEL);
        if (!leds_data)
                return -ENOMEM;
 
        for (i = 0; i < pdata->num_leds; i++) {
                ret = create_ns2_led(pdev, &leds_data[i], &pdata->leds[i]);
-               if (ret < 0)
-                       goto err;
-
+               if (ret < 0) {
+                       for (i = i - 1; i >= 0; i--)
+                               delete_ns2_led(&leds_data[i]);
+                       return ret;
+               }
        }
 
        platform_set_drvdata(pdev, leds_data);
 
        return 0;
-
-err:
-       for (i = i - 1; i >= 0; i--)
-               delete_ns2_led(&leds_data[i]);
-
-       kfree(leds_data);
-
-       return ret;
 }
 
 static int __devexit ns2_led_remove(struct platform_device *pdev)
@@ -309,7 +303,6 @@ static int __devexit ns2_led_remove(struct platform_device *pdev)
        for (i = 0; i < pdata->num_leds; i++)
                delete_ns2_led(&leds_data[i]);
 
-       kfree(leds_data);
        platform_set_drvdata(pdev, NULL);
 
        return 0;