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

hwmon: (emc2103) 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
9dd304f8 e70198ac

+27 -64
+27 -64
drivers/hwmon/emc2103.c
··· 66 66 }; 67 67 68 68 struct emc2103_data { 69 - struct device *hwmon_dev; 69 + struct i2c_client *client; 70 + const struct attribute_group *groups[4]; 70 71 struct mutex update_lock; 71 72 bool valid; /* registers are valid */ 72 73 bool fan_rpm_control; ··· 147 146 148 147 static struct emc2103_data *emc2103_update_device(struct device *dev) 149 148 { 150 - struct i2c_client *client = to_i2c_client(dev); 151 - struct emc2103_data *data = i2c_get_clientdata(client); 149 + struct emc2103_data *data = dev_get_drvdata(dev); 150 + struct i2c_client *client = data->client; 152 151 153 152 mutex_lock(&data->update_lock); 154 153 ··· 243 242 const char *buf, size_t count) 244 243 { 245 244 int nr = to_sensor_dev_attr(da)->index; 246 - struct i2c_client *client = to_i2c_client(dev); 247 - struct emc2103_data *data = i2c_get_clientdata(client); 245 + struct emc2103_data *data = dev_get_drvdata(dev); 246 + struct i2c_client *client = data->client; 248 247 long val; 249 248 250 249 int result = kstrtol(buf, 10, &val); ··· 265 264 const char *buf, size_t count) 266 265 { 267 266 int nr = to_sensor_dev_attr(da)->index; 268 - struct i2c_client *client = to_i2c_client(dev); 269 - struct emc2103_data *data = i2c_get_clientdata(client); 267 + struct emc2103_data *data = dev_get_drvdata(dev); 268 + struct i2c_client *client = data->client; 270 269 long val; 271 270 272 271 int result = kstrtol(buf, 10, &val); ··· 311 310 const char *buf, size_t count) 312 311 { 313 312 struct emc2103_data *data = emc2103_update_device(dev); 314 - struct i2c_client *client = to_i2c_client(dev); 313 + struct i2c_client *client = data->client; 315 314 int new_range_bits, old_div = 8 / data->fan_multiplier; 316 315 long new_div; 317 316 ··· 386 385 const char *buf, size_t count) 387 386 { 388 387 struct emc2103_data *data = emc2103_update_device(dev); 389 - struct i2c_client *client = to_i2c_client(dev); 388 + struct i2c_client *client = data->client; 390 389 unsigned long rpm_target; 391 390 392 391 int result = kstrtoul(buf, 10, &rpm_target); ··· 429 428 static ssize_t set_pwm_enable(struct device *dev, struct device_attribute *da, 430 429 const char *buf, size_t count) 431 430 { 432 - struct i2c_client *client = to_i2c_client(dev); 433 - struct emc2103_data *data = i2c_get_clientdata(client); 431 + struct emc2103_data *data = dev_get_drvdata(dev); 432 + struct i2c_client *client = data->client; 434 433 long new_value; 435 434 u8 conf_reg; 436 435 ··· 581 580 emc2103_probe(struct i2c_client *client, const struct i2c_device_id *id) 582 581 { 583 582 struct emc2103_data *data; 584 - int status; 583 + struct device *hwmon_dev; 584 + int status, idx = 0; 585 585 586 586 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 587 587 return -EIO; ··· 593 591 return -ENOMEM; 594 592 595 593 i2c_set_clientdata(client, data); 594 + data->client = client; 596 595 mutex_init(&data->update_lock); 597 596 598 597 /* 2103-2 and 2103-4 have 3 external diodes, 2103-1 has 1 */ ··· 627 624 } 628 625 } 629 626 630 - /* Register sysfs hooks */ 631 - status = sysfs_create_group(&client->dev.kobj, &emc2103_group); 632 - if (status) 633 - return status; 627 + /* sysfs hooks */ 628 + data->groups[idx++] = &emc2103_group; 629 + if (data->temp_count >= 3) 630 + data->groups[idx++] = &emc2103_temp3_group; 631 + if (data->temp_count == 4) 632 + data->groups[idx++] = &emc2103_temp4_group; 634 633 635 - if (data->temp_count >= 3) { 636 - status = sysfs_create_group(&client->dev.kobj, 637 - &emc2103_temp3_group); 638 - if (status) 639 - goto exit_remove; 640 - } 641 - 642 - if (data->temp_count == 4) { 643 - status = sysfs_create_group(&client->dev.kobj, 644 - &emc2103_temp4_group); 645 - if (status) 646 - goto exit_remove_temp3; 647 - } 648 - 649 - data->hwmon_dev = hwmon_device_register(&client->dev); 650 - if (IS_ERR(data->hwmon_dev)) { 651 - status = PTR_ERR(data->hwmon_dev); 652 - goto exit_remove_temp4; 653 - } 634 + hwmon_dev = devm_hwmon_device_register_with_groups(&client->dev, 635 + client->name, data, 636 + data->groups); 637 + if (IS_ERR(hwmon_dev)) 638 + return PTR_ERR(hwmon_dev); 654 639 655 640 dev_info(&client->dev, "%s: sensor '%s'\n", 656 - dev_name(data->hwmon_dev), client->name); 657 - 658 - return 0; 659 - 660 - exit_remove_temp4: 661 - if (data->temp_count == 4) 662 - sysfs_remove_group(&client->dev.kobj, &emc2103_temp4_group); 663 - exit_remove_temp3: 664 - if (data->temp_count >= 3) 665 - sysfs_remove_group(&client->dev.kobj, &emc2103_temp3_group); 666 - exit_remove: 667 - sysfs_remove_group(&client->dev.kobj, &emc2103_group); 668 - return status; 669 - } 670 - 671 - static int emc2103_remove(struct i2c_client *client) 672 - { 673 - struct emc2103_data *data = i2c_get_clientdata(client); 674 - 675 - hwmon_device_unregister(data->hwmon_dev); 676 - 677 - if (data->temp_count == 4) 678 - sysfs_remove_group(&client->dev.kobj, &emc2103_temp4_group); 679 - 680 - if (data->temp_count >= 3) 681 - sysfs_remove_group(&client->dev.kobj, &emc2103_temp3_group); 682 - 683 - sysfs_remove_group(&client->dev.kobj, &emc2103_group); 641 + dev_name(hwmon_dev), client->name); 684 642 685 643 return 0; 686 644 } ··· 681 717 .name = "emc2103", 682 718 }, 683 719 .probe = emc2103_probe, 684 - .remove = emc2103_remove, 685 720 .id_table = emc2103_ids, 686 721 .detect = emc2103_detect, 687 722 .address_list = normal_i2c,