hwmon: (asus_atk0110) Replace deprecated device register call
[linux-2.6-microblaze.git] / drivers / hwmon / asus_atk0110.c
index 975c43d..fcba2b8 100644 (file)
@@ -125,6 +125,8 @@ struct atk_data {
        int temperature_count;
        int fan_count;
        struct list_head sensor_list;
+       struct attribute_group attr_group;
+       const struct attribute_group *attr_groups[2];
 
        struct {
                struct dentry *root;
@@ -262,14 +264,6 @@ static ssize_t atk_limit2_show(struct device *dev,
        return sprintf(buf, "%lld\n", value);
 }
 
-static ssize_t atk_name_show(struct device *dev,
-                               struct device_attribute *attr, char *buf)
-{
-       return sprintf(buf, "atk0110\n");
-}
-static struct device_attribute atk_name_attr =
-               __ATTR(name, 0444, atk_name_show, NULL);
-
 static void atk_init_attribute(struct device_attribute *attr, char *name,
                sysfs_show_func show)
 {
@@ -1193,42 +1187,30 @@ static int atk_enumerate_new_hwmon(struct atk_data *data)
        return err;
 }
 
-static int atk_create_files(struct atk_data *data)
+static int atk_init_attribute_groups(struct atk_data *data)
 {
+       struct device *dev = &data->acpi_dev->dev;
        struct atk_sensor_data *s;
-       int err;
+       struct attribute **attrs;
+       int i = 0;
+       int len = (data->voltage_count + data->temperature_count
+                       + data->fan_count) * 4 + 1;
+
+       attrs = devm_kcalloc(dev, len, sizeof(struct attribute *), GFP_KERNEL);
+       if (!attrs)
+               return -ENOMEM;
 
        list_for_each_entry(s, &data->sensor_list, list) {
-               err = device_create_file(data->hwmon_dev, &s->input_attr);
-               if (err)
-                       return err;
-               err = device_create_file(data->hwmon_dev, &s->label_attr);
-               if (err)
-                       return err;
-               err = device_create_file(data->hwmon_dev, &s->limit1_attr);
-               if (err)
-                       return err;
-               err = device_create_file(data->hwmon_dev, &s->limit2_attr);
-               if (err)
-                       return err;
+               attrs[i++] = &s->input_attr.attr;
+               attrs[i++] = &s->label_attr.attr;
+               attrs[i++] = &s->limit1_attr.attr;
+               attrs[i++] = &s->limit2_attr.attr;
        }
 
-       err = device_create_file(data->hwmon_dev, &atk_name_attr);
+       data->attr_group.attrs = attrs;
+       data->attr_groups[0] = &data->attr_group;
 
-       return err;
-}
-
-static void atk_remove_files(struct atk_data *data)
-{
-       struct atk_sensor_data *s;
-
-       list_for_each_entry(s, &data->sensor_list, list) {
-               device_remove_file(data->hwmon_dev, &s->input_attr);
-               device_remove_file(data->hwmon_dev, &s->label_attr);
-               device_remove_file(data->hwmon_dev, &s->limit1_attr);
-               device_remove_file(data->hwmon_dev, &s->limit2_attr);
-       }
-       device_remove_file(data->hwmon_dev, &atk_name_attr);
+       return 0;
 }
 
 static void atk_free_sensors(struct atk_data *data)
@@ -1245,24 +1227,15 @@ static void atk_free_sensors(struct atk_data *data)
 static int atk_register_hwmon(struct atk_data *data)
 {
        struct device *dev = &data->acpi_dev->dev;
-       int err;
 
        dev_dbg(dev, "registering hwmon device\n");
-       data->hwmon_dev = hwmon_device_register(dev);
+       data->hwmon_dev = hwmon_device_register_with_groups(dev, "atk0110",
+                                                           data,
+                                                           data->attr_groups);
        if (IS_ERR(data->hwmon_dev))
                return PTR_ERR(data->hwmon_dev);
 
-       dev_dbg(dev, "populating sysfs directory\n");
-       err = atk_create_files(data);
-       if (err)
-               goto remove;
-
        return 0;
-remove:
-       /* Cleanup the registered files */
-       atk_remove_files(data);
-       hwmon_device_unregister(data->hwmon_dev);
-       return err;
 }
 
 static int atk_probe_if(struct atk_data *data)
@@ -1397,6 +1370,9 @@ static int atk_add(struct acpi_device *device)
                goto out;
        }
 
+       err = atk_init_attribute_groups(data);
+       if (err)
+               goto out;
        err = atk_register_hwmon(data);
        if (err)
                goto cleanup;
@@ -1423,7 +1399,6 @@ static int atk_remove(struct acpi_device *device)
 
        atk_debugfs_cleanup(data);
 
-       atk_remove_files(data);
        atk_free_sensors(data);
        hwmon_device_unregister(data->hwmon_dev);