summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBastian Germann <bastiangermann@fishpost.de>2018-06-01 11:14:18 -0400
committerGuenter Roeck <linux@roeck-us.net>2018-06-01 12:34:54 -0400
commit3c60726d217b3e03cef2d9f785727a53fff49450 (patch)
tree6b7e21f31b19ceed2fab24a60edf7ba07edeb3d2
parentfb8eefd3b4e6f79e0930fffff6640744699c6f1d (diff)
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: Bastian Germann <bastiangermann@fishpost.de> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
-rw-r--r--drivers/hwmon/asus_atk0110.c75
1 files changed, 25 insertions, 50 deletions
diff --git a/drivers/hwmon/asus_atk0110.c b/drivers/hwmon/asus_atk0110.c
index 975c43d446f8..fcba2b82ec71 100644
--- a/drivers/hwmon/asus_atk0110.c
+++ b/drivers/hwmon/asus_atk0110.c
@@ -125,6 +125,8 @@ struct atk_data {
125 int temperature_count; 125 int temperature_count;
126 int fan_count; 126 int fan_count;
127 struct list_head sensor_list; 127 struct list_head sensor_list;
128 struct attribute_group attr_group;
129 const struct attribute_group *attr_groups[2];
128 130
129 struct { 131 struct {
130 struct dentry *root; 132 struct dentry *root;
@@ -262,14 +264,6 @@ static ssize_t atk_limit2_show(struct device *dev,
262 return sprintf(buf, "%lld\n", value); 264 return sprintf(buf, "%lld\n", value);
263} 265}
264 266
265static ssize_t atk_name_show(struct device *dev,
266 struct device_attribute *attr, char *buf)
267{
268 return sprintf(buf, "atk0110\n");
269}
270static struct device_attribute atk_name_attr =
271 __ATTR(name, 0444, atk_name_show, NULL);
272
273static void atk_init_attribute(struct device_attribute *attr, char *name, 267static void atk_init_attribute(struct device_attribute *attr, char *name,
274 sysfs_show_func show) 268 sysfs_show_func show)
275{ 269{
@@ -1193,42 +1187,30 @@ static int atk_enumerate_new_hwmon(struct atk_data *data)
1193 return err; 1187 return err;
1194} 1188}
1195 1189
1196static int atk_create_files(struct atk_data *data) 1190static int atk_init_attribute_groups(struct atk_data *data)
1197{ 1191{
1192 struct device *dev = &data->acpi_dev->dev;
1198 struct atk_sensor_data *s; 1193 struct atk_sensor_data *s;
1199 int err; 1194 struct attribute **attrs;
1195 int i = 0;
1196 int len = (data->voltage_count + data->temperature_count
1197 + data->fan_count) * 4 + 1;
1198
1199 attrs = devm_kcalloc(dev, len, sizeof(struct attribute *), GFP_KERNEL);
1200 if (!attrs)
1201 return -ENOMEM;
1200 1202
1201 list_for_each_entry(s, &data->sensor_list, list) { 1203 list_for_each_entry(s, &data->sensor_list, list) {
1202 err = device_create_file(data->hwmon_dev, &s->input_attr); 1204 attrs[i++] = &s->input_attr.attr;
1203 if (err) 1205 attrs[i++] = &s->label_attr.attr;
1204 return err; 1206 attrs[i++] = &s->limit1_attr.attr;
1205 err = device_create_file(data->hwmon_dev, &s->label_attr); 1207 attrs[i++] = &s->limit2_attr.attr;
1206 if (err)
1207 return err;
1208 err = device_create_file(data->hwmon_dev, &s->limit1_attr);
1209 if (err)
1210 return err;
1211 err = device_create_file(data->hwmon_dev, &s->limit2_attr);
1212 if (err)
1213 return err;
1214 } 1208 }
1215 1209
1216 err = device_create_file(data->hwmon_dev, &atk_name_attr); 1210 data->attr_group.attrs = attrs;
1211 data->attr_groups[0] = &data->attr_group;
1217 1212
1218 return err; 1213 return 0;
1219}
1220
1221static void atk_remove_files(struct atk_data *data)
1222{
1223 struct atk_sensor_data *s;
1224
1225 list_for_each_entry(s, &data->sensor_list, list) {
1226 device_remove_file(data->hwmon_dev, &s->input_attr);
1227 device_remove_file(data->hwmon_dev, &s->label_attr);
1228 device_remove_file(data->hwmon_dev, &s->limit1_attr);
1229 device_remove_file(data->hwmon_dev, &s->limit2_attr);
1230 }
1231 device_remove_file(data->hwmon_dev, &atk_name_attr);
1232} 1214}
1233 1215
1234static void atk_free_sensors(struct atk_data *data) 1216static void atk_free_sensors(struct atk_data *data)
@@ -1245,24 +1227,15 @@ static void atk_free_sensors(struct atk_data *data)
1245static int atk_register_hwmon(struct atk_data *data) 1227static int atk_register_hwmon(struct atk_data *data)
1246{ 1228{
1247 struct device *dev = &data->acpi_dev->dev; 1229 struct device *dev = &data->acpi_dev->dev;
1248 int err;
1249 1230
1250 dev_dbg(dev, "registering hwmon device\n"); 1231 dev_dbg(dev, "registering hwmon device\n");
1251 data->hwmon_dev = hwmon_device_register(dev); 1232 data->hwmon_dev = hwmon_device_register_with_groups(dev, "atk0110",
1233 data,
1234 data->attr_groups);
1252 if (IS_ERR(data->hwmon_dev)) 1235 if (IS_ERR(data->hwmon_dev))
1253 return PTR_ERR(data->hwmon_dev); 1236 return PTR_ERR(data->hwmon_dev);
1254 1237
1255 dev_dbg(dev, "populating sysfs directory\n");
1256 err = atk_create_files(data);
1257 if (err)
1258 goto remove;
1259
1260 return 0; 1238 return 0;
1261remove:
1262 /* Cleanup the registered files */
1263 atk_remove_files(data);
1264 hwmon_device_unregister(data->hwmon_dev);
1265 return err;
1266} 1239}
1267 1240
1268static int atk_probe_if(struct atk_data *data) 1241static int atk_probe_if(struct atk_data *data)
@@ -1397,6 +1370,9 @@ static int atk_add(struct acpi_device *device)
1397 goto out; 1370 goto out;
1398 } 1371 }
1399 1372
1373 err = atk_init_attribute_groups(data);
1374 if (err)
1375 goto out;
1400 err = atk_register_hwmon(data); 1376 err = atk_register_hwmon(data);
1401 if (err) 1377 if (err)
1402 goto cleanup; 1378 goto cleanup;
@@ -1423,7 +1399,6 @@ static int atk_remove(struct acpi_device *device)
1423 1399
1424 atk_debugfs_cleanup(data); 1400 atk_debugfs_cleanup(data);
1425 1401
1426 atk_remove_files(data);
1427 atk_free_sensors(data); 1402 atk_free_sensors(data);
1428 hwmon_device_unregister(data->hwmon_dev); 1403 hwmon_device_unregister(data->hwmon_dev);
1429 1404