leds: convert PCA955x LED driver to devm_kzalloc() and cleanup error exit path
authorBryan Wu <bryan.wu@canonical.com>
Wed, 4 Jul 2012 04:09:05 +0000 (12:09 +0800)
committerBryan Wu <bryan.wu@canonical.com>
Mon, 23 Jul 2012 23:52:39 +0000 (07:52 +0800)
Cc: Nate Case <ncase@xes-inc.com>
Signed-off-by: Bryan Wu <bryan.wu@canonical.com>
drivers/leds/leds-pca955x.c

index 5f462db..aef3cf0 100644 (file)
@@ -293,15 +293,14 @@ static int __devinit pca955x_probe(struct i2c_client *client,
                }
        }
 
-       pca955x = kzalloc(sizeof(*pca955x), GFP_KERNEL);
+       pca955x = devm_kzalloc(&client->dev, sizeof(*pca955x), GFP_KERNEL);
        if (!pca955x)
                return -ENOMEM;
 
-       pca955x->leds = kzalloc(sizeof(*pca955x_led) * chip->bits, GFP_KERNEL);
-       if (!pca955x->leds) {
-               err = -ENOMEM;
-               goto exit_nomem;
-       }
+       pca955x->leds = devm_kzalloc(&client->dev,
+                       sizeof(*pca955x_led) * chip->bits, GFP_KERNEL);
+       if (!pca955x->leds)
+               return -ENOMEM;
 
        i2c_set_clientdata(client, pca955x);
 
@@ -361,10 +360,6 @@ exit:
                cancel_work_sync(&pca955x->leds[i].work);
        }
 
-       kfree(pca955x->leds);
-exit_nomem:
-       kfree(pca955x);
-
        return err;
 }
 
@@ -378,9 +373,6 @@ static int __devexit pca955x_remove(struct i2c_client *client)
                cancel_work_sync(&pca955x->leds[i].work);
        }
 
-       kfree(pca955x->leds);
-       kfree(pca955x);
-
        return 0;
 }