Merge branch 'core-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-block.git] / drivers / rtc / rtc-abx80x.c
index 6ddcad642d1e4caa1a50fc53e64705f1ad279cd1..73830670a41f13b6eb4a5afe09b75f878f11e271 100644 (file)
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * A driver for the I2C members of the Abracon AB x8xx RTC family,
  * and compatible: AB 1805 and AB 0805
@@ -7,10 +8,6 @@
  * Author: Philippe De Muyter <phdm@macqel.be>
  * Author: Alexandre Belloni <alexandre.belloni@bootlin.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
  */
 
 #include <linux/bcd.h>
@@ -404,7 +401,7 @@ static ssize_t autocalibration_store(struct device *dev,
                return -EINVAL;
        }
 
-       retval = abx80x_rtc_set_autocalibration(dev, autocalibration);
+       retval = abx80x_rtc_set_autocalibration(dev->parent, autocalibration);
 
        return retval ? retval : count;
 }
@@ -414,7 +411,7 @@ static ssize_t autocalibration_show(struct device *dev,
 {
        int autocalibration = 0;
 
-       autocalibration = abx80x_rtc_get_autocalibration(dev);
+       autocalibration = abx80x_rtc_get_autocalibration(dev->parent);
        if (autocalibration < 0) {
                dev_err(dev, "Failed to read RTC autocalibration\n");
                sprintf(buf, "0\n");
@@ -430,7 +427,7 @@ static ssize_t oscillator_store(struct device *dev,
                                struct device_attribute *attr,
                                const char *buf, size_t count)
 {
-       struct i2c_client *client = to_i2c_client(dev);
+       struct i2c_client *client = to_i2c_client(dev->parent);
        int retval, flags, rc_mode = 0;
 
        if (strncmp(buf, "rc", 2) == 0) {
@@ -472,7 +469,7 @@ static ssize_t oscillator_show(struct device *dev,
                               struct device_attribute *attr, char *buf)
 {
        int rc_mode = 0;
-       struct i2c_client *client = to_i2c_client(dev);
+       struct i2c_client *client = to_i2c_client(dev->parent);
 
        rc_mode = abx80x_is_rc_mode(client);
 
@@ -592,13 +589,6 @@ static int abx80x_dt_trickle_cfg(struct device_node *np)
        return (trickle_cfg | i);
 }
 
-static void rtc_calib_remove_sysfs_group(void *_dev)
-{
-       struct device *dev = _dev;
-
-       sysfs_remove_group(&dev->kobj, &rtc_calib_attr_group);
-}
-
 #ifdef CONFIG_WATCHDOG
 
 static inline u8 timeout_bits(unsigned int timeout)
@@ -851,32 +841,14 @@ static int abx80x_probe(struct i2c_client *client,
                }
        }
 
-       /* Export sysfs entries */
-       err = sysfs_create_group(&(&client->dev)->kobj, &rtc_calib_attr_group);
+       err = rtc_add_group(priv->rtc, &rtc_calib_attr_group);
        if (err) {
                dev_err(&client->dev, "Failed to create sysfs group: %d\n",
                        err);
                return err;
        }
 
-       err = devm_add_action_or_reset(&client->dev,
-                                      rtc_calib_remove_sysfs_group,
-                                      &client->dev);
-       if (err) {
-               dev_err(&client->dev,
-                       "Failed to add sysfs cleanup action: %d\n",
-                       err);
-               return err;
-       }
-
-       err = rtc_register_device(priv->rtc);
-
-       return err;
-}
-
-static int abx80x_remove(struct i2c_client *client)
-{
-       return 0;
+       return rtc_register_device(priv->rtc);
 }
 
 static const struct i2c_device_id abx80x_id[] = {
@@ -899,7 +871,6 @@ static struct i2c_driver abx80x_driver = {
                .name   = "rtc-abx80x",
        },
        .probe          = abx80x_probe,
-       .remove         = abx80x_remove,
        .id_table       = abx80x_id,
 };