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

hwmon: (adm9240) 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
715f69be 82803252

+26 -48
+26 -48
drivers/hwmon/adm9240.c
··· 132 132 133 133 /* per client data */ 134 134 struct adm9240_data { 135 - struct device *hwmon_dev; 135 + struct i2c_client *client; 136 136 struct mutex update_lock; 137 137 char valid; 138 138 unsigned long last_updated_measure; ··· 170 170 171 171 static struct adm9240_data *adm9240_update_device(struct device *dev) 172 172 { 173 - struct i2c_client *client = to_i2c_client(dev); 174 - struct adm9240_data *data = i2c_get_clientdata(client); 173 + struct adm9240_data *data = dev_get_drvdata(dev); 174 + struct i2c_client *client = data->client; 175 175 int i; 176 176 177 177 mutex_lock(&data->update_lock); ··· 278 278 const char *buf, size_t count) 279 279 { 280 280 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 281 - struct i2c_client *client = to_i2c_client(dev); 282 - struct adm9240_data *data = i2c_get_clientdata(client); 281 + struct adm9240_data *data = dev_get_drvdata(dev); 282 + struct i2c_client *client = data->client; 283 283 long val; 284 284 int err; 285 285 ··· 334 334 const char *buf, size_t count) 335 335 { 336 336 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 337 - struct i2c_client *client = to_i2c_client(dev); 338 - struct adm9240_data *data = i2c_get_clientdata(client); 337 + struct adm9240_data *data = dev_get_drvdata(dev); 338 + struct i2c_client *client = data->client; 339 339 unsigned long val; 340 340 int err; 341 341 ··· 356 356 const char *buf, size_t count) 357 357 { 358 358 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 359 - struct i2c_client *client = to_i2c_client(dev); 360 - struct adm9240_data *data = i2c_get_clientdata(client); 359 + struct adm9240_data *data = dev_get_drvdata(dev); 360 + struct i2c_client *client = data->client; 361 361 unsigned long val; 362 362 int err; 363 363 ··· 431 431 const char *buf, size_t count) 432 432 { 433 433 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 434 - struct i2c_client *client = to_i2c_client(dev); 435 - struct adm9240_data *data = i2c_get_clientdata(client); 434 + struct adm9240_data *data = dev_get_drvdata(dev); 435 + struct i2c_client *client = data->client; 436 436 int nr = attr->index; 437 437 u8 new_div; 438 438 unsigned long val; ··· 544 544 struct device_attribute *attr, 545 545 const char *buf, size_t count) 546 546 { 547 - struct i2c_client *client = to_i2c_client(dev); 548 - struct adm9240_data *data = i2c_get_clientdata(client); 547 + struct adm9240_data *data = dev_get_drvdata(dev); 548 + struct i2c_client *client = data->client; 549 549 long val; 550 550 int err; 551 551 ··· 565 565 struct device_attribute *attr, 566 566 const char *buf, size_t count) 567 567 { 568 - struct i2c_client *client = to_i2c_client(dev); 569 - struct adm9240_data *data = i2c_get_clientdata(client); 568 + struct adm9240_data *data = dev_get_drvdata(dev); 569 + struct i2c_client *client = data->client; 570 570 unsigned long val; 571 571 572 572 if (kstrtoul(buf, 10, &val) || val != 0) ··· 583 583 static SENSOR_DEVICE_ATTR(intrusion0_alarm, S_IRUGO | S_IWUSR, show_alarm, 584 584 chassis_clear, 12); 585 585 586 - static struct attribute *adm9240_attributes[] = { 586 + static struct attribute *adm9240_attrs[] = { 587 587 &sensor_dev_attr_in0_input.dev_attr.attr, 588 588 &sensor_dev_attr_in0_min.dev_attr.attr, 589 589 &sensor_dev_attr_in0_max.dev_attr.attr, ··· 627 627 NULL 628 628 }; 629 629 630 - static const struct attribute_group adm9240_group = { 631 - .attrs = adm9240_attributes, 632 - }; 630 + ATTRIBUTE_GROUPS(adm9240); 633 631 634 632 635 633 /*** sensor chip detect and driver install ***/ ··· 722 724 static int adm9240_probe(struct i2c_client *new_client, 723 725 const struct i2c_device_id *id) 724 726 { 727 + struct device *dev = &new_client->dev; 728 + struct device *hwmon_dev; 725 729 struct adm9240_data *data; 726 - int err; 727 730 728 - data = devm_kzalloc(&new_client->dev, sizeof(*data), GFP_KERNEL); 731 + data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); 729 732 if (!data) 730 733 return -ENOMEM; 731 734 732 735 i2c_set_clientdata(new_client, data); 736 + data->client = new_client; 733 737 mutex_init(&data->update_lock); 734 738 735 739 adm9240_init_client(new_client); 736 740 737 - /* populate sysfs filesystem */ 738 - err = sysfs_create_group(&new_client->dev.kobj, &adm9240_group); 739 - if (err) 740 - return err; 741 - 742 - data->hwmon_dev = hwmon_device_register(&new_client->dev); 743 - if (IS_ERR(data->hwmon_dev)) { 744 - err = PTR_ERR(data->hwmon_dev); 745 - goto exit_remove; 746 - } 747 - 748 - return 0; 749 - 750 - exit_remove: 751 - sysfs_remove_group(&new_client->dev.kobj, &adm9240_group); 752 - return err; 753 - } 754 - 755 - static int adm9240_remove(struct i2c_client *client) 756 - { 757 - struct adm9240_data *data = i2c_get_clientdata(client); 758 - 759 - hwmon_device_unregister(data->hwmon_dev); 760 - sysfs_remove_group(&client->dev.kobj, &adm9240_group); 761 - 762 - return 0; 741 + hwmon_dev = devm_hwmon_device_register_with_groups(dev, 742 + new_client->name, 743 + data, 744 + adm9240_groups); 745 + return PTR_ERR_OR_ZERO(hwmon_dev); 763 746 } 764 747 765 748 static const struct i2c_device_id adm9240_id[] = { ··· 757 778 .name = "adm9240", 758 779 }, 759 780 .probe = adm9240_probe, 760 - .remove = adm9240_remove, 761 781 .id_table = adm9240_id, 762 782 .detect = adm9240_detect, 763 783 .address_list = normal_i2c,