Commit 3c60726d authored by Bastian Germann's avatar Bastian Germann Committed by Guenter Roeck

hwmon: (asus_atk0110) Replace deprecated device register call

Make the asus_atk0110 driver use hwmon_device_register_with_groups instead
of the deprecated hwmon_device_register.
Construct the expected attribute_group array from the sensor list which
contains all needed attributes.
Remove the manual sysfs file creation and deletion that are now taken care
of by the (un)register calls via the attribute_group array.
Signed-off-by: default avatarBastian Germann <bastiangermann@fishpost.de>
Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent fb8eefd3
......@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment