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

hwmon: (smsc47m192) Convert to devm_hwmon_device_register_with_groups

Use 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
166f7296 94314e25

+25 -52
+25 -52
drivers/hwmon/smsc47m192.c
··· 95 95 } 96 96 97 97 struct smsc47m192_data { 98 - struct device *hwmon_dev; 98 + struct i2c_client *client; 99 + const struct attribute_group *groups[3]; 99 100 struct mutex update_lock; 100 101 char valid; /* !=0 if following fields are valid */ 101 102 unsigned long last_updated; /* In jiffies */ ··· 115 114 116 115 static struct smsc47m192_data *smsc47m192_update_device(struct device *dev) 117 116 { 118 - struct i2c_client *client = to_i2c_client(dev); 119 - struct smsc47m192_data *data = i2c_get_clientdata(client); 117 + struct smsc47m192_data *data = dev_get_drvdata(dev); 118 + struct i2c_client *client = data->client; 120 119 int i, config; 121 120 122 121 mutex_lock(&data->update_lock); ··· 210 209 { 211 210 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 212 211 int nr = sensor_attr->index; 213 - struct i2c_client *client = to_i2c_client(dev); 214 - struct smsc47m192_data *data = i2c_get_clientdata(client); 212 + struct smsc47m192_data *data = dev_get_drvdata(dev); 213 + struct i2c_client *client = data->client; 215 214 unsigned long val; 216 215 int err; 217 216 ··· 232 231 { 233 232 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 234 233 int nr = sensor_attr->index; 235 - struct i2c_client *client = to_i2c_client(dev); 236 - struct smsc47m192_data *data = i2c_get_clientdata(client); 234 + struct smsc47m192_data *data = dev_get_drvdata(dev); 235 + struct i2c_client *client = data->client; 237 236 unsigned long val; 238 237 int err; 239 238 ··· 299 298 { 300 299 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 301 300 int nr = sensor_attr->index; 302 - struct i2c_client *client = to_i2c_client(dev); 303 - struct smsc47m192_data *data = i2c_get_clientdata(client); 301 + struct smsc47m192_data *data = dev_get_drvdata(dev); 302 + struct i2c_client *client = data->client; 304 303 long val; 305 304 int err; 306 305 ··· 321 320 { 322 321 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 323 322 int nr = sensor_attr->index; 324 - struct i2c_client *client = to_i2c_client(dev); 325 - struct smsc47m192_data *data = i2c_get_clientdata(client); 323 + struct smsc47m192_data *data = dev_get_drvdata(dev); 324 + struct i2c_client *client = data->client; 326 325 long val; 327 326 int err; 328 327 ··· 352 351 { 353 352 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 354 353 int nr = sensor_attr->index; 355 - struct i2c_client *client = to_i2c_client(dev); 356 - struct smsc47m192_data *data = i2c_get_clientdata(client); 354 + struct smsc47m192_data *data = dev_get_drvdata(dev); 355 + struct i2c_client *client = data->client; 357 356 u8 sfr = i2c_smbus_read_byte_data(client, SMSC47M192_REG_SFR); 358 357 long val; 359 358 int err; ··· 592 591 static int smsc47m192_probe(struct i2c_client *client, 593 592 const struct i2c_device_id *id) 594 593 { 594 + struct device *dev = &client->dev; 595 + struct device *hwmon_dev; 595 596 struct smsc47m192_data *data; 596 597 int config; 597 - int err; 598 598 599 - data = devm_kzalloc(&client->dev, sizeof(struct smsc47m192_data), 600 - GFP_KERNEL); 599 + data = devm_kzalloc(dev, sizeof(struct smsc47m192_data), GFP_KERNEL); 601 600 if (!data) 602 601 return -ENOMEM; 603 602 604 - i2c_set_clientdata(client, data); 603 + data->client = client; 605 604 data->vrm = vid_which_vrm(); 606 605 mutex_init(&data->update_lock); 607 606 608 607 /* Initialize the SMSC47M192 chip */ 609 608 smsc47m192_init_client(client); 610 609 611 - /* Register sysfs hooks */ 612 - err = sysfs_create_group(&client->dev.kobj, &smsc47m192_group); 613 - if (err) 614 - return err; 615 - 610 + /* sysfs hooks */ 611 + data->groups[0] = &smsc47m192_group; 616 612 /* Pin 110 is either in4 (+12V) or VID4 */ 617 613 config = i2c_smbus_read_byte_data(client, SMSC47M192_REG_CONFIG); 618 - if (!(config & 0x20)) { 619 - err = sysfs_create_group(&client->dev.kobj, 620 - &smsc47m192_group_in4); 621 - if (err) 622 - goto exit_remove_files; 623 - } 614 + if (!(config & 0x20)) 615 + data->groups[1] = &smsc47m192_group_in4; 624 616 625 - data->hwmon_dev = hwmon_device_register(&client->dev); 626 - if (IS_ERR(data->hwmon_dev)) { 627 - err = PTR_ERR(data->hwmon_dev); 628 - goto exit_remove_files; 629 - } 630 - 631 - return 0; 632 - 633 - exit_remove_files: 634 - sysfs_remove_group(&client->dev.kobj, &smsc47m192_group); 635 - sysfs_remove_group(&client->dev.kobj, &smsc47m192_group_in4); 636 - return err; 637 - } 638 - 639 - static int smsc47m192_remove(struct i2c_client *client) 640 - { 641 - struct smsc47m192_data *data = i2c_get_clientdata(client); 642 - 643 - hwmon_device_unregister(data->hwmon_dev); 644 - sysfs_remove_group(&client->dev.kobj, &smsc47m192_group); 645 - sysfs_remove_group(&client->dev.kobj, &smsc47m192_group_in4); 646 - 647 - return 0; 617 + hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, 618 + data, data->groups); 619 + return PTR_ERR_OR_ZERO(hwmon_dev); 648 620 } 649 621 650 622 static const struct i2c_device_id smsc47m192_id[] = { ··· 632 658 .name = "smsc47m192", 633 659 }, 634 660 .probe = smsc47m192_probe, 635 - .remove = smsc47m192_remove, 636 661 .id_table = smsc47m192_id, 637 662 .detect = smsc47m192_detect, 638 663 .address_list = normal_i2c,