Skip to content

Commit

Permalink
hwmon: (asus_atk0110) Replace deprecated device register call
Browse files Browse the repository at this point in the history
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: Bastian Germann <bastiangermann@fishpost.de>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
  • Loading branch information
Bastian Germann authored and Guenter Roeck committed Jun 1, 2018
1 parent fb8eefd commit 3c60726
Showing 1 changed file with 25 additions and 50 deletions.
75 changes: 25 additions & 50 deletions drivers/hwmon/asus_atk0110.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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)
{
Expand Down Expand Up @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -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;
Expand All @@ -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);

Expand Down

0 comments on commit 3c60726

Please sign in to comment.