rtc: s35390a: convert to devm_i2c_new_dummy_device()
[linux-2.6-microblaze.git] / drivers / rtc / rtc-s35390a.c
index d773fd5..da34cfd 100644 (file)
@@ -434,37 +434,32 @@ static int s35390a_probe(struct i2c_client *client,
        char buf, status1;
        struct device *dev = &client->dev;
 
-       if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
-               err = -ENODEV;
-               goto exit;
-       }
+       if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
+               return -ENODEV;
 
        s35390a = devm_kzalloc(dev, sizeof(struct s35390a), GFP_KERNEL);
-       if (!s35390a) {
-               err = -ENOMEM;
-               goto exit;
-       }
+       if (!s35390a)
+               return -ENOMEM;
 
        s35390a->client[0] = client;
        i2c_set_clientdata(client, s35390a);
 
        /* This chip uses multiple addresses, use dummy devices for them */
        for (i = 1; i < 8; ++i) {
-               s35390a->client[i] = i2c_new_dummy_device(client->adapter,
-                                                         client->addr + i);
+               s35390a->client[i] = devm_i2c_new_dummy_device(dev,
+                                                              client->adapter,
+                                                              client->addr + i);
                if (IS_ERR(s35390a->client[i])) {
                        dev_err(dev, "Address %02x unavailable\n",
                                client->addr + i);
-                       err = PTR_ERR(s35390a->client[i]);
-                       goto exit_dummy;
+                       return PTR_ERR(s35390a->client[i]);
                }
        }
 
        err_read = s35390a_read_status(s35390a, &status1);
        if (err_read < 0) {
-               err = err_read;
                dev_err(dev, "error resetting chip\n");
-               goto exit_dummy;
+               return err_read;
        }
 
        if (status1 & S35390A_FLAG_24H)
@@ -478,13 +473,13 @@ static int s35390a_probe(struct i2c_client *client,
                err = s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &buf, 1);
                if (err < 0) {
                        dev_err(dev, "error disabling alarm");
-                       goto exit_dummy;
+                       return err;
                }
        } else {
                err = s35390a_disable_test_mode(s35390a);
                if (err < 0) {
                        dev_err(dev, "error disabling test mode\n");
-                       goto exit_dummy;
+                       return err;
                }
        }
 
@@ -493,10 +488,8 @@ static int s35390a_probe(struct i2c_client *client,
        s35390a->rtc = devm_rtc_device_register(dev, s35390a_driver.driver.name,
                                                &s35390a_rtc_ops, THIS_MODULE);
 
-       if (IS_ERR(s35390a->rtc)) {
-               err = PTR_ERR(s35390a->rtc);
-               goto exit_dummy;
-       }
+       if (IS_ERR(s35390a->rtc))
+               return PTR_ERR(s35390a->rtc);
 
        /* supports per-minute alarms only, therefore set uie_unsupported */
        s35390a->rtc->uie_unsupported = 1;
@@ -505,26 +498,6 @@ static int s35390a_probe(struct i2c_client *client,
                rtc_update_irq(s35390a->rtc, 1, RTC_AF);
 
        return 0;
-
-exit_dummy:
-       for (i = 1; i < 8; ++i)
-               if (s35390a->client[i])
-                       i2c_unregister_device(s35390a->client[i]);
-
-exit:
-       return err;
-}
-
-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]);
-
-       return 0;
 }
 
 static struct i2c_driver s35390a_driver = {
@@ -533,7 +506,6 @@ static struct i2c_driver s35390a_driver = {
                .of_match_table = of_match_ptr(s35390a_of_match),
        },
        .probe          = s35390a_probe,
-       .remove         = s35390a_remove,
        .id_table       = s35390a_id,
 };