Merge branch 'parisc-3.19-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller...
[cascardo/linux.git] / drivers / rtc / rtc-isl1208.c
index c016ad8..c3c549d 100644 (file)
@@ -144,11 +144,7 @@ isl1208_i2c_validate_client(struct i2c_client *client)
 static int
 isl1208_i2c_get_sr(struct i2c_client *client)
 {
-       int sr = i2c_smbus_read_byte_data(client, ISL1208_REG_SR);
-       if (sr < 0)
-               return -EIO;
-
-       return sr;
+       return i2c_smbus_read_byte_data(client, ISL1208_REG_SR);
 }
 
 static int
@@ -647,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);
@@ -662,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)
@@ -684,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;
 }