Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

hwmon: (adt7470) Convert to devm_hwmon_device_register_with_groups

Use ATTRIBUTE_GROUPS macro and devm_hwmon_device_register_with_groups() to
simplify the code a bit.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>

authored by

Axel Lin and committed by
Guenter Roeck
30485776 9027d933

+41 -54
+41 -54
drivers/hwmon/adt7470.c
··· 143 143 #define FAN_DATA_VALID(x) ((x) && (x) != FAN_PERIOD_INVALID) 144 144 145 145 struct adt7470_data { 146 - struct device *hwmon_dev; 147 - struct attribute_group attrs; 146 + struct i2c_client *client; 148 147 struct mutex lock; 149 148 char sensors_valid; 150 149 char limits_valid; ··· 277 278 278 279 static struct adt7470_data *adt7470_update_device(struct device *dev) 279 280 { 280 - struct i2c_client *client = to_i2c_client(dev); 281 - struct adt7470_data *data = i2c_get_clientdata(client); 281 + struct adt7470_data *data = dev_get_drvdata(dev); 282 + struct i2c_client *client = data->client; 282 283 unsigned long local_jiffies = jiffies; 283 284 u8 cfg; 284 285 int i; ··· 408 409 const char *buf, 409 410 size_t count) 410 411 { 411 - struct i2c_client *client = to_i2c_client(dev); 412 - struct adt7470_data *data = i2c_get_clientdata(client); 412 + struct adt7470_data *data = dev_get_drvdata(dev); 413 413 long temp; 414 414 415 415 if (kstrtol(buf, 10, &temp)) ··· 436 438 const char *buf, 437 439 size_t count) 438 440 { 439 - struct i2c_client *client = to_i2c_client(dev); 440 - struct adt7470_data *data = i2c_get_clientdata(client); 441 + struct adt7470_data *data = dev_get_drvdata(dev); 441 442 long temp; 442 443 443 444 if (kstrtol(buf, 10, &temp)) ··· 468 471 size_t count) 469 472 { 470 473 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 471 - struct i2c_client *client = to_i2c_client(dev); 472 - struct adt7470_data *data = i2c_get_clientdata(client); 474 + struct adt7470_data *data = dev_get_drvdata(dev); 475 + struct i2c_client *client = data->client; 473 476 long temp; 474 477 475 478 if (kstrtol(buf, 10, &temp)) ··· 502 505 size_t count) 503 506 { 504 507 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 505 - struct i2c_client *client = to_i2c_client(dev); 506 - struct adt7470_data *data = i2c_get_clientdata(client); 508 + struct adt7470_data *data = dev_get_drvdata(dev); 509 + struct i2c_client *client = data->client; 507 510 long temp; 508 511 509 512 if (kstrtol(buf, 10, &temp)) ··· 557 560 const char *buf, size_t count) 558 561 { 559 562 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 560 - struct i2c_client *client = to_i2c_client(dev); 561 - struct adt7470_data *data = i2c_get_clientdata(client); 563 + struct adt7470_data *data = dev_get_drvdata(dev); 564 + struct i2c_client *client = data->client; 562 565 long temp; 563 566 564 567 if (kstrtol(buf, 10, &temp) || !temp) ··· 594 597 const char *buf, size_t count) 595 598 { 596 599 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 597 - struct i2c_client *client = to_i2c_client(dev); 598 - struct adt7470_data *data = i2c_get_clientdata(client); 600 + struct adt7470_data *data = dev_get_drvdata(dev); 601 + struct i2c_client *client = data->client; 599 602 long temp; 600 603 601 604 if (kstrtol(buf, 10, &temp) || !temp) ··· 638 641 const char *buf, 639 642 size_t count) 640 643 { 641 - struct i2c_client *client = to_i2c_client(dev); 642 - struct adt7470_data *data = i2c_get_clientdata(client); 644 + struct adt7470_data *data = dev_get_drvdata(dev); 645 + struct i2c_client *client = data->client; 643 646 long temp; 644 647 u8 reg; 645 648 ··· 671 674 const char *buf, size_t count) 672 675 { 673 676 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 674 - struct i2c_client *client = to_i2c_client(dev); 675 - struct adt7470_data *data = i2c_get_clientdata(client); 677 + struct adt7470_data *data = dev_get_drvdata(dev); 678 + struct i2c_client *client = data->client; 676 679 long temp; 677 680 678 681 if (kstrtol(buf, 10, &temp)) ··· 703 706 size_t count) 704 707 { 705 708 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 706 - struct i2c_client *client = to_i2c_client(dev); 707 - struct adt7470_data *data = i2c_get_clientdata(client); 709 + struct adt7470_data *data = dev_get_drvdata(dev); 710 + struct i2c_client *client = data->client; 708 711 long temp; 709 712 710 713 if (kstrtol(buf, 10, &temp)) ··· 736 739 size_t count) 737 740 { 738 741 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 739 - struct i2c_client *client = to_i2c_client(dev); 740 - struct adt7470_data *data = i2c_get_clientdata(client); 742 + struct adt7470_data *data = dev_get_drvdata(dev); 743 + struct i2c_client *client = data->client; 741 744 long temp; 742 745 743 746 if (kstrtol(buf, 10, &temp)) ··· 779 782 size_t count) 780 783 { 781 784 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 782 - struct i2c_client *client = to_i2c_client(dev); 783 - struct adt7470_data *data = i2c_get_clientdata(client); 785 + struct adt7470_data *data = dev_get_drvdata(dev); 786 + struct i2c_client *client = data->client; 784 787 long temp; 785 788 786 789 if (kstrtol(buf, 10, &temp)) ··· 813 816 size_t count) 814 817 { 815 818 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 816 - struct i2c_client *client = to_i2c_client(dev); 817 - struct adt7470_data *data = i2c_get_clientdata(client); 819 + struct adt7470_data *data = dev_get_drvdata(dev); 820 + struct i2c_client *client = data->client; 818 821 int pwm_auto_reg = ADT7470_REG_PWM_CFG(attr->index); 819 822 int pwm_auto_reg_mask; 820 823 long temp; ··· 874 877 size_t count) 875 878 { 876 879 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 877 - struct i2c_client *client = to_i2c_client(dev); 878 - struct adt7470_data *data = i2c_get_clientdata(client); 880 + struct adt7470_data *data = dev_get_drvdata(dev); 881 + struct i2c_client *client = data->client; 879 882 int pwm_auto_reg = ADT7470_REG_PWM_AUTO_TEMP(attr->index); 880 883 long temp; 881 884 u8 reg; ··· 1092 1095 static SENSOR_DEVICE_ATTR(pwm4_auto_channels_temp, S_IWUSR | S_IRUGO, 1093 1096 show_pwm_auto_temp, set_pwm_auto_temp, 3); 1094 1097 1095 - static struct attribute *adt7470_attr[] = { 1098 + static struct attribute *adt7470_attrs[] = { 1096 1099 &dev_attr_alarm_mask.attr, 1097 1100 &dev_attr_num_temp_sensors.attr, 1098 1101 &dev_attr_auto_update_interval.attr, ··· 1184 1187 NULL 1185 1188 }; 1186 1189 1190 + ATTRIBUTE_GROUPS(adt7470); 1191 + 1187 1192 /* Return 0 if detection is successful, -ENODEV otherwise */ 1188 1193 static int adt7470_detect(struct i2c_client *client, 1189 1194 struct i2c_board_info *info) ··· 1228 1229 static int adt7470_probe(struct i2c_client *client, 1229 1230 const struct i2c_device_id *id) 1230 1231 { 1232 + struct device *dev = &client->dev; 1231 1233 struct adt7470_data *data; 1232 - int err; 1234 + struct device *hwmon_dev; 1233 1235 1234 - data = devm_kzalloc(&client->dev, sizeof(struct adt7470_data), 1235 - GFP_KERNEL); 1236 + data = devm_kzalloc(dev, sizeof(struct adt7470_data), GFP_KERNEL); 1236 1237 if (!data) 1237 1238 return -ENOMEM; 1238 1239 ··· 1240 1241 data->auto_update_interval = AUTO_UPDATE_INTERVAL; 1241 1242 1242 1243 i2c_set_clientdata(client, data); 1244 + data->client = client; 1243 1245 mutex_init(&data->lock); 1244 1246 1245 1247 dev_info(&client->dev, "%s chip found\n", client->name); ··· 1249 1249 adt7470_init_client(client); 1250 1250 1251 1251 /* Register sysfs hooks */ 1252 - data->attrs.attrs = adt7470_attr; 1253 - err = sysfs_create_group(&client->dev.kobj, &data->attrs); 1254 - if (err) 1255 - return err; 1252 + hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, 1253 + data, 1254 + adt7470_groups); 1256 1255 1257 - data->hwmon_dev = hwmon_device_register(&client->dev); 1258 - if (IS_ERR(data->hwmon_dev)) { 1259 - err = PTR_ERR(data->hwmon_dev); 1260 - goto exit_remove; 1261 - } 1256 + if (IS_ERR(hwmon_dev)) 1257 + return PTR_ERR(hwmon_dev); 1262 1258 1263 1259 init_completion(&data->auto_update_stop); 1264 1260 data->auto_update = kthread_run(adt7470_update_thread, client, "%s", 1265 - dev_name(data->hwmon_dev)); 1261 + dev_name(hwmon_dev)); 1266 1262 if (IS_ERR(data->auto_update)) { 1267 - err = PTR_ERR(data->auto_update); 1268 - goto exit_unregister; 1263 + return PTR_ERR(data->auto_update); 1269 1264 } 1270 1265 1271 1266 return 0; 1272 - 1273 - exit_unregister: 1274 - hwmon_device_unregister(data->hwmon_dev); 1275 - exit_remove: 1276 - sysfs_remove_group(&client->dev.kobj, &data->attrs); 1277 - return err; 1278 1267 } 1279 1268 1280 1269 static int adt7470_remove(struct i2c_client *client) ··· 1272 1283 1273 1284 kthread_stop(data->auto_update); 1274 1285 wait_for_completion(&data->auto_update_stop); 1275 - hwmon_device_unregister(data->hwmon_dev); 1276 - sysfs_remove_group(&client->dev.kobj, &data->attrs); 1277 1286 return 0; 1278 1287 } 1279 1288