drivers/rtc/rtc-isl1208.c: use devm_* APIs
authorSachin Kamat <sachin.kamat@linaro.org>
Tue, 12 Nov 2013 23:10:30 +0000 (15:10 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 13 Nov 2013 03:09:27 +0000 (12:09 +0900)
devm_* APIs are device managed and make code simpler.

Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
Cc: Herbert Valerio Riedel <hvr@gnu.org>
Cc: 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-isl1208.c

index 5a0bf7ce103342443c0621888595217385399724..c3c549d511b964fc7853d2eb4557ea22ab7eecc8 100644 (file)
@@ -643,10 +643,11 @@ isl1208_probe(struct i2c_client *client, const struct i2c_device_id *id)
                 "chip found, driver version " DRV_VERSION "\n");
 
        if (client->irq > 0) {
-               rc = request_threaded_irq(client->irq, NULL,
-                                         isl1208_rtc_interrupt,
-                                         IRQF_SHARED,
-                                         isl1208_driver.driver.name, client);
+               rc = devm_request_threaded_irq(&client->dev, client->irq, NULL,
+                                              isl1208_rtc_interrupt,
+                                              IRQF_SHARED,
+                                              isl1208_driver.driver.name,
+                                              client);
                if (!rc) {
                        device_init_wakeup(&client->dev, 1);
                        enable_irq_wake(client->irq);
@@ -658,20 +659,18 @@ isl1208_probe(struct i2c_client *client, const struct i2c_device_id *id)
                }
        }
 
-       rtc = rtc_device_register(isl1208_driver.driver.name,
-                                 &client->dev, &isl1208_rtc_ops,
+       rtc = devm_rtc_device_register(&client->dev, isl1208_driver.driver.name,
+                                 &isl1208_rtc_ops,
                                  THIS_MODULE);
-       if (IS_ERR(rtc)) {
-               rc = PTR_ERR(rtc);
-               goto exit_free_irq;
-       }
+       if (IS_ERR(rtc))
+               return PTR_ERR(rtc);
 
        i2c_set_clientdata(client, rtc);
 
        rc = isl1208_i2c_get_sr(client);
        if (rc < 0) {
                dev_err(&client->dev, "reading status failed\n");
-               goto exit_unregister;
+               return rc;
        }
 
        if (rc & ISL1208_REG_SR_RTCF)
@@ -680,28 +679,15 @@ isl1208_probe(struct i2c_client *client, const struct i2c_device_id *id)
 
        rc = sysfs_create_group(&client->dev.kobj, &isl1208_rtc_sysfs_files);
        if (rc)
-               goto exit_unregister;
+               return rc;
 
        return 0;
-
-exit_unregister:
-       rtc_device_unregister(rtc);
-exit_free_irq:
-       if (client->irq)
-               free_irq(client->irq, client);
-
-       return rc;
 }
 
 static int
 isl1208_remove(struct i2c_client *client)
 {
-       struct rtc_device *rtc = i2c_get_clientdata(client);
-
        sysfs_remove_group(&client->dev.kobj, &isl1208_rtc_sysfs_files);
-       rtc_device_unregister(rtc);
-       if (client->irq)
-               free_irq(client->irq, client);
 
        return 0;
 }