rtc: rtc-s35390a: use devm_*() functions
authorJingoo Han <jg1.han@samsung.com>
Mon, 29 Apr 2013 23:20:53 +0000 (16:20 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 30 Apr 2013 01:28:38 +0000 (18:28 -0700)
Use devm_*() functions to make cleanup paths simpler.

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/rtc/rtc-s35390a.c

index 8a092325188d07265e7c77f7935407d58c9e41e5..f40afdd0e5f5939f418b6527521b7c381ffaa286 100644 (file)
@@ -338,7 +338,8 @@ static int s35390a_probe(struct i2c_client *client,
                goto exit;
        }
 
-       s35390a = kzalloc(sizeof(struct s35390a), GFP_KERNEL);
+       s35390a = devm_kzalloc(&client->dev, sizeof(struct s35390a),
+                               GFP_KERNEL);
        if (!s35390a) {
                err = -ENOMEM;
                goto exit;
@@ -386,8 +387,9 @@ static int s35390a_probe(struct i2c_client *client,
 
        device_set_wakeup_capable(&client->dev, 1);
 
-       s35390a->rtc = rtc_device_register(s35390a_driver.driver.name,
-                               &client->dev, &s35390a_rtc_ops, THIS_MODULE);
+       s35390a->rtc = devm_rtc_device_register(&client->dev,
+                                       s35390a_driver.driver.name,
+                                       &s35390a_rtc_ops, THIS_MODULE);
 
        if (IS_ERR(s35390a->rtc)) {
                err = PTR_ERR(s35390a->rtc);
@@ -399,7 +401,6 @@ exit_dummy:
        for (i = 1; i < 8; ++i)
                if (s35390a->client[i])
                        i2c_unregister_device(s35390a->client[i]);
-       kfree(s35390a);
 
 exit:
        return err;
@@ -408,15 +409,12 @@ exit:
 static int s35390a_remove(struct i2c_client *client)
 {
        unsigned int i;
-
        struct s35390a *s35390a = i2c_get_clientdata(client);
+
        for (i = 1; i < 8; ++i)
                if (s35390a->client[i])
                        i2c_unregister_device(s35390a->client[i]);
 
-       rtc_device_unregister(s35390a->rtc);
-       kfree(s35390a);
-
        return 0;
 }