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

Merge branch 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging

Pull hwmon updates from Jean Delvare:
"This includes a number of driver conversions to
devm_hwmon_device_register_with_groups, a few cleanups, and
support for the ITE IT8623E"

* 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging:
hwmon: (it87) Add support for IT8623E
hwmon: (it87) Fix IT8603E define name
hwmon: (lm90) Convert to use hwmon_device_register_with_groups
hwmon: (lm90) Create all sysfs groups in one call
hwmon: (lm90) Always use the dev variable in the probe function
hwmon: (lm90) Create most optional attributes with sysfs_create_group
hwmon: Avoid initializing the same field twice
hwmon: (pc87360) Avoid initializing the same field twice
hwmon: (lm80) Convert to use devm_hwmon_device_register_with_groups
hwmon: (adm1021) Convert to use devm_hwmon_device_register_with_groups
hwmon: (lm63) Avoid initializing the same field twice
hwmon: (lm63) Convert to use devm_hwmon_device_register_with_groups
hwmon: (lm63) Create all sysfs groups in one call
hwmon: (lm63) Introduce 'dev' variable to point to client->dev
hwmon: (lm63) Add additional sysfs group for temp2_type attribute
hwmon: (f71805f) Fix author's address

+174 -283
+5 -5
Documentation/hwmon/it87
··· 2 2 ================== 3 3 4 4 Supported chips: 5 - * IT8603E 5 + * IT8603E/IT8623E 6 6 Prefix: 'it8603' 7 7 Addresses scanned: from Super I/O config space (8 I/O ports) 8 8 Datasheet: Not publicly available ··· 94 94 Description 95 95 ----------- 96 96 97 - This driver implements support for the IT8603E, IT8705F, IT8712F, IT8716F, 98 - IT8718F, IT8720F, IT8721F, IT8726F, IT8728F, IT8758E, IT8771E, IT8772E, 99 - IT8782F, IT8783E/F, and SiS950 chips. 97 + This driver implements support for the IT8603E, IT8623E, IT8705F, IT8712F, 98 + IT8716F, IT8718F, IT8720F, IT8721F, IT8726F, IT8728F, IT8758E, IT8771E, 99 + IT8772E, IT8782F, IT8783E/F, and SiS950 chips. 100 100 101 101 These chips are 'Super I/O chips', supporting floppy disks, infrared ports, 102 102 joysticks and other miscellaneous stuff. For hardware monitoring, they ··· 133 133 The IT8728F, IT8771E, and IT8772E are considered compatible with the IT8721F, 134 134 until a datasheet becomes available (hopefully.) 135 135 136 - The IT8603E is a custom design, hardware monitoring part is similar to 136 + The IT8603E/IT8623E is a custom design, hardware monitoring part is similar to 137 137 IT8728F. It only supports 16-bit fan mode, the full speed mode of the 138 138 fan is not supported (value 0 of pwmX_enable). 139 139
+22 -48
drivers/hwmon/adm1021.c
··· 79 79 80 80 /* Each client has this additional data */ 81 81 struct adm1021_data { 82 - struct device *hwmon_dev; 82 + struct i2c_client *client; 83 83 enum chips type; 84 + 85 + const struct attribute_group *groups[3]; 84 86 85 87 struct mutex update_lock; 86 88 char valid; /* !=0 if following fields are valid */ ··· 103 101 static int adm1021_detect(struct i2c_client *client, 104 102 struct i2c_board_info *info); 105 103 static void adm1021_init_client(struct i2c_client *client); 106 - static int adm1021_remove(struct i2c_client *client); 107 104 static struct adm1021_data *adm1021_update_device(struct device *dev); 108 105 109 106 /* (amalysh) read only mode, otherwise any limit's writing confuse BIOS */ ··· 129 128 .name = "adm1021", 130 129 }, 131 130 .probe = adm1021_probe, 132 - .remove = adm1021_remove, 133 131 .id_table = adm1021_id, 134 132 .detect = adm1021_detect, 135 133 .address_list = normal_i2c, ··· 182 182 const char *buf, size_t count) 183 183 { 184 184 int index = to_sensor_dev_attr(devattr)->index; 185 - struct i2c_client *client = to_i2c_client(dev); 186 - struct adm1021_data *data = i2c_get_clientdata(client); 185 + struct adm1021_data *data = dev_get_drvdata(dev); 186 + struct i2c_client *client = data->client; 187 187 long temp; 188 188 int err; 189 189 ··· 207 207 const char *buf, size_t count) 208 208 { 209 209 int index = to_sensor_dev_attr(devattr)->index; 210 - struct i2c_client *client = to_i2c_client(dev); 211 - struct adm1021_data *data = i2c_get_clientdata(client); 210 + struct adm1021_data *data = dev_get_drvdata(dev); 211 + struct i2c_client *client = data->client; 212 212 long temp; 213 213 int err; 214 214 ··· 238 238 struct device_attribute *devattr, 239 239 const char *buf, size_t count) 240 240 { 241 - struct i2c_client *client = to_i2c_client(dev); 242 - struct adm1021_data *data = i2c_get_clientdata(client); 241 + struct adm1021_data *data = dev_get_drvdata(dev); 242 + struct i2c_client *client = data->client; 243 243 char low_power; 244 244 unsigned long val; 245 245 int err; ··· 412 412 static int adm1021_probe(struct i2c_client *client, 413 413 const struct i2c_device_id *id) 414 414 { 415 + struct device *dev = &client->dev; 415 416 struct adm1021_data *data; 416 - int err; 417 + struct device *hwmon_dev; 417 418 418 - data = devm_kzalloc(&client->dev, sizeof(struct adm1021_data), 419 - GFP_KERNEL); 419 + data = devm_kzalloc(dev, sizeof(struct adm1021_data), GFP_KERNEL); 420 420 if (!data) 421 421 return -ENOMEM; 422 422 423 - i2c_set_clientdata(client, data); 423 + data->client = client; 424 424 data->type = id->driver_data; 425 425 mutex_init(&data->update_lock); 426 426 ··· 428 428 if (data->type != lm84 && !read_only) 429 429 adm1021_init_client(client); 430 430 431 - /* Register sysfs hooks */ 432 - err = sysfs_create_group(&client->dev.kobj, &adm1021_group); 433 - if (err) 434 - return err; 431 + data->groups[0] = &adm1021_group; 432 + if (data->type != lm84) 433 + data->groups[1] = &adm1021_min_group; 435 434 436 - if (data->type != lm84) { 437 - err = sysfs_create_group(&client->dev.kobj, &adm1021_min_group); 438 - if (err) 439 - goto error; 440 - } 435 + hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, 436 + data, data->groups); 441 437 442 - data->hwmon_dev = hwmon_device_register(&client->dev); 443 - if (IS_ERR(data->hwmon_dev)) { 444 - err = PTR_ERR(data->hwmon_dev); 445 - goto error; 446 - } 447 - 448 - return 0; 449 - 450 - error: 451 - sysfs_remove_group(&client->dev.kobj, &adm1021_min_group); 452 - sysfs_remove_group(&client->dev.kobj, &adm1021_group); 453 - return err; 438 + return PTR_ERR_OR_ZERO(hwmon_dev); 454 439 } 455 440 456 441 static void adm1021_init_client(struct i2c_client *client) ··· 447 462 i2c_smbus_write_byte_data(client, ADM1021_REG_CONV_RATE_W, 0x04); 448 463 } 449 464 450 - static int adm1021_remove(struct i2c_client *client) 451 - { 452 - struct adm1021_data *data = i2c_get_clientdata(client); 453 - 454 - hwmon_device_unregister(data->hwmon_dev); 455 - sysfs_remove_group(&client->dev.kobj, &adm1021_min_group); 456 - sysfs_remove_group(&client->dev.kobj, &adm1021_group); 457 - 458 - return 0; 459 - } 460 - 461 465 static struct adm1021_data *adm1021_update_device(struct device *dev) 462 466 { 463 - struct i2c_client *client = to_i2c_client(dev); 464 - struct adm1021_data *data = i2c_get_clientdata(client); 467 + struct adm1021_data *data = dev_get_drvdata(dev); 468 + struct i2c_client *client = data->client; 465 469 466 470 mutex_lock(&data->update_lock); 467 471 ··· 458 484 || !data->valid) { 459 485 int i; 460 486 461 - dev_dbg(&client->dev, "Starting adm1021 update\n"); 487 + dev_dbg(dev, "Starting adm1021 update\n"); 462 488 463 489 for (i = 0; i < 2; i++) { 464 490 data->temp[i] = 1000 *
-1
drivers/hwmon/asc7621.c
··· 1115 1115 return -ENOMEM; 1116 1116 1117 1117 i2c_set_clientdata(client, data); 1118 - data->valid = 0; 1119 1118 mutex_init(&data->update_lock); 1120 1119 1121 1120 /* Initialize the asc7621 chip */
-2
drivers/hwmon/atxp1.c
··· 353 353 data->vrm = vid_which_vrm(); 354 354 355 355 i2c_set_clientdata(new_client, data); 356 - data->valid = 0; 357 - 358 356 mutex_init(&data->update_lock); 359 357 360 358 /* Register sysfs hooks */
+1 -1
drivers/hwmon/f71805f.c
··· 1648 1648 platform_driver_unregister(&f71805f_driver); 1649 1649 } 1650 1650 1651 - MODULE_AUTHOR("Jean Delvare <khali@linux-fr>"); 1651 + MODULE_AUTHOR("Jean Delvare <jdelvare@suse.de>"); 1652 1652 MODULE_LICENSE("GPL"); 1653 1653 MODULE_DESCRIPTION("F71805F/F71872F hardware monitoring driver"); 1654 1654
+6 -3
drivers/hwmon/it87.c
··· 11 11 * similar parts. The other devices are supported by different drivers. 12 12 * 13 13 * Supports: IT8603E Super I/O chip w/LPC interface 14 + * IT8623E Super I/O chip w/LPC interface 14 15 * IT8705F Super I/O chip w/LPC interface 15 16 * IT8712F Super I/O chip w/LPC interface 16 17 * IT8716F Super I/O chip w/LPC interface ··· 148 147 #define IT8772E_DEVID 0x8772 149 148 #define IT8782F_DEVID 0x8782 150 149 #define IT8783E_DEVID 0x8783 151 - #define IT8306E_DEVID 0x8603 150 + #define IT8603E_DEVID 0x8603 151 + #define IT8623E_DEVID 0x8623 152 152 #define IT87_ACT_REG 0x30 153 153 #define IT87_BASE_REG 0x60 154 154 ··· 1433 1431 static SENSOR_DEVICE_ATTR(in3_label, S_IRUGO, show_label, NULL, 0); 1434 1432 static SENSOR_DEVICE_ATTR(in7_label, S_IRUGO, show_label, NULL, 1); 1435 1433 static SENSOR_DEVICE_ATTR(in8_label, S_IRUGO, show_label, NULL, 2); 1436 - /* special AVCC3 IT8306E in9 */ 1434 + /* special AVCC3 IT8603E in9 */ 1437 1435 static SENSOR_DEVICE_ATTR(in9_label, S_IRUGO, show_label, NULL, 0); 1438 1436 1439 1437 static ssize_t show_name(struct device *dev, struct device_attribute ··· 1768 1766 case IT8783E_DEVID: 1769 1767 sio_data->type = it8783; 1770 1768 break; 1771 - case IT8306E_DEVID: 1769 + case IT8603E_DEVID: 1770 + case IT8623E_DEVID: 1772 1771 sio_data->type = it8603; 1773 1772 break; 1774 1773 case 0xffff: /* No device at all */
+64 -95
drivers/hwmon/lm63.c
··· 155 155 */ 156 156 157 157 struct lm63_data { 158 - struct device *hwmon_dev; 158 + struct i2c_client *client; 159 159 struct mutex update_lock; 160 + const struct attribute_group *groups[5]; 160 161 char valid; /* zero until following fields are valid */ 161 162 char lut_valid; /* zero until lut fields are valid */ 162 163 unsigned long last_updated; /* in jiffies */ ··· 219 218 * Update the lookup table register cache. 220 219 * client->update_lock must be held when calling this function. 221 220 */ 222 - static void lm63_update_lut(struct i2c_client *client) 221 + static void lm63_update_lut(struct lm63_data *data) 223 222 { 224 - struct lm63_data *data = i2c_get_clientdata(client); 223 + struct i2c_client *client = data->client; 225 224 int i; 226 225 227 226 if (time_after(jiffies, data->lut_last_updated + 5 * HZ) || ··· 242 241 243 242 static struct lm63_data *lm63_update_device(struct device *dev) 244 243 { 245 - struct i2c_client *client = to_i2c_client(dev); 246 - struct lm63_data *data = i2c_get_clientdata(client); 244 + struct lm63_data *data = dev_get_drvdata(dev); 245 + struct i2c_client *client = data->client; 247 246 unsigned long next_update; 248 247 249 248 mutex_lock(&data->update_lock); ··· 311 310 data->valid = 1; 312 311 } 313 312 314 - lm63_update_lut(client); 313 + lm63_update_lut(data); 315 314 316 315 mutex_unlock(&data->update_lock); 317 316 ··· 322 321 * Trip points in the lookup table should be in ascending order for both 323 322 * temperatures and PWM output values. 324 323 */ 325 - static int lm63_lut_looks_bad(struct i2c_client *client) 324 + static int lm63_lut_looks_bad(struct device *dev, struct lm63_data *data) 326 325 { 327 - struct lm63_data *data = i2c_get_clientdata(client); 328 326 int i; 329 327 330 328 mutex_lock(&data->update_lock); 331 - lm63_update_lut(client); 329 + lm63_update_lut(data); 332 330 333 331 for (i = 1; i < data->lut_size; i++) { 334 332 if (data->pwm1[1 + i - 1] > data->pwm1[1 + i] 335 333 || data->temp8[3 + i - 1] > data->temp8[3 + i]) { 336 - dev_warn(&client->dev, 334 + dev_warn(dev, 337 335 "Lookup table doesn't look sane (check entries %d and %d)\n", 338 336 i, i + 1); 339 337 break; ··· 358 358 static ssize_t set_fan(struct device *dev, struct device_attribute *dummy, 359 359 const char *buf, size_t count) 360 360 { 361 - struct i2c_client *client = to_i2c_client(dev); 362 - struct lm63_data *data = i2c_get_clientdata(client); 361 + struct lm63_data *data = dev_get_drvdata(dev); 362 + struct i2c_client *client = data->client; 363 363 unsigned long val; 364 364 int err; 365 365 ··· 399 399 const char *buf, size_t count) 400 400 { 401 401 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 402 - struct i2c_client *client = to_i2c_client(dev); 403 - struct lm63_data *data = i2c_get_clientdata(client); 402 + struct lm63_data *data = dev_get_drvdata(dev); 403 + struct i2c_client *client = data->client; 404 404 int nr = attr->index; 405 405 unsigned long val; 406 406 int err; ··· 435 435 struct device_attribute *dummy, 436 436 const char *buf, size_t count) 437 437 { 438 - struct i2c_client *client = to_i2c_client(dev); 439 - struct lm63_data *data = i2c_get_clientdata(client); 438 + struct lm63_data *data = dev_get_drvdata(dev); 439 + struct i2c_client *client = data->client; 440 440 unsigned long val; 441 441 int err; 442 442 ··· 450 450 * Only let the user switch to automatic mode if the lookup table 451 451 * looks sane. 452 452 */ 453 - if (val == 2 && lm63_lut_looks_bad(client)) 453 + if (val == 2 && lm63_lut_looks_bad(dev, data)) 454 454 return -EPERM; 455 455 456 456 mutex_lock(&data->update_lock); ··· 461 461 else 462 462 data->config_fan &= ~0x20; 463 463 i2c_smbus_write_byte_data(client, LM63_REG_CONFIG_FAN, 464 - data->config_fan); 464 + data->config_fan); 465 465 mutex_unlock(&data->update_lock); 466 466 return count; 467 467 } ··· 505 505 const char *buf, size_t count) 506 506 { 507 507 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 508 - struct i2c_client *client = to_i2c_client(dev); 509 - struct lm63_data *data = i2c_get_clientdata(client); 508 + struct lm63_data *data = dev_get_drvdata(dev); 509 + struct i2c_client *client = data->client; 510 510 int nr = attr->index; 511 511 long val; 512 512 int err; ··· 579 579 }; 580 580 581 581 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 582 - struct i2c_client *client = to_i2c_client(dev); 583 - struct lm63_data *data = i2c_get_clientdata(client); 582 + struct lm63_data *data = dev_get_drvdata(dev); 583 + struct i2c_client *client = data->client; 584 584 long val; 585 585 int err; 586 586 int nr = attr->index; ··· 635 635 struct device_attribute *dummy, 636 636 const char *buf, size_t count) 637 637 { 638 - struct i2c_client *client = to_i2c_client(dev); 639 - struct lm63_data *data = i2c_get_clientdata(client); 638 + struct lm63_data *data = dev_get_drvdata(dev); 639 + struct i2c_client *client = data->client; 640 640 long val; 641 641 int err; 642 642 long hyst; ··· 657 657 * Set conversion rate. 658 658 * client->update_lock must be held when calling this function. 659 659 */ 660 - static void lm63_set_convrate(struct i2c_client *client, struct lm63_data *data, 661 - unsigned int interval) 660 + static void lm63_set_convrate(struct lm63_data *data, unsigned int interval) 662 661 { 663 - int i; 662 + struct i2c_client *client = data->client; 664 663 unsigned int update_interval; 664 + int i; 665 665 666 666 /* Shift calculations to avoid rounding errors */ 667 667 interval <<= 6; ··· 689 689 struct device_attribute *attr, 690 690 const char *buf, size_t count) 691 691 { 692 - struct i2c_client *client = to_i2c_client(dev); 693 - struct lm63_data *data = i2c_get_clientdata(client); 692 + struct lm63_data *data = dev_get_drvdata(dev); 694 693 unsigned long val; 695 694 int err; 696 695 ··· 698 699 return err; 699 700 700 701 mutex_lock(&data->update_lock); 701 - lm63_set_convrate(client, data, clamp_val(val, 0, 100000)); 702 + lm63_set_convrate(data, clamp_val(val, 0, 100000)); 702 703 mutex_unlock(&data->update_lock); 703 704 704 705 return count; ··· 707 708 static ssize_t show_type(struct device *dev, struct device_attribute *attr, 708 709 char *buf) 709 710 { 710 - struct i2c_client *client = to_i2c_client(dev); 711 - struct lm63_data *data = i2c_get_clientdata(client); 711 + struct lm63_data *data = dev_get_drvdata(dev); 712 712 713 713 return sprintf(buf, data->trutherm ? "1\n" : "2\n"); 714 714 } ··· 715 717 static ssize_t set_type(struct device *dev, struct device_attribute *attr, 716 718 const char *buf, size_t count) 717 719 { 718 - struct i2c_client *client = to_i2c_client(dev); 719 - struct lm63_data *data = i2c_get_clientdata(client); 720 + struct lm63_data *data = dev_get_drvdata(dev); 721 + struct i2c_client *client = data->client; 720 722 unsigned long val; 721 723 int ret; 722 724 u8 reg; ··· 913 915 NULL 914 916 }; 915 917 918 + static struct attribute *lm63_attributes_temp2_type[] = { 919 + &dev_attr_temp2_type.attr, 920 + NULL 921 + }; 922 + 923 + static const struct attribute_group lm63_group_temp2_type = { 924 + .attrs = lm63_attributes_temp2_type, 925 + }; 926 + 916 927 static struct attribute *lm63_attributes_extra_lut[] = { 917 928 &sensor_dev_attr_pwm1_auto_point9_pwm.dev_attr.attr, 918 929 &sensor_dev_attr_pwm1_auto_point9_temp.dev_attr.attr, ··· 953 946 struct attribute *attr, int index) 954 947 { 955 948 struct device *dev = container_of(kobj, struct device, kobj); 956 - struct i2c_client *client = to_i2c_client(dev); 957 - struct lm63_data *data = i2c_get_clientdata(client); 949 + struct lm63_data *data = dev_get_drvdata(dev); 958 950 959 951 if (attr == &sensor_dev_attr_temp2_crit.dev_attr.attr 960 952 && (data->kind == lm64 || ··· 1032 1026 * Ideally we shouldn't have to initialize anything, since the BIOS 1033 1027 * should have taken care of everything 1034 1028 */ 1035 - static void lm63_init_client(struct i2c_client *client) 1029 + static void lm63_init_client(struct lm63_data *data) 1036 1030 { 1037 - struct lm63_data *data = i2c_get_clientdata(client); 1031 + struct i2c_client *client = data->client; 1032 + struct device *dev = &client->dev; 1038 1033 u8 convrate; 1039 1034 1040 1035 data->config = i2c_smbus_read_byte_data(client, LM63_REG_CONFIG1); ··· 1044 1037 1045 1038 /* Start converting if needed */ 1046 1039 if (data->config & 0x40) { /* standby */ 1047 - dev_dbg(&client->dev, "Switching to operational mode\n"); 1040 + dev_dbg(dev, "Switching to operational mode\n"); 1048 1041 data->config &= 0xA7; 1049 1042 i2c_smbus_write_byte_data(client, LM63_REG_CONFIG1, 1050 1043 data->config); ··· 1097 1090 1098 1091 /* Show some debug info about the LM63 configuration */ 1099 1092 if (data->kind == lm63) 1100 - dev_dbg(&client->dev, "Alert/tach pin configured for %s\n", 1093 + dev_dbg(dev, "Alert/tach pin configured for %s\n", 1101 1094 (data->config & 0x04) ? "tachometer input" : 1102 1095 "alert output"); 1103 - dev_dbg(&client->dev, "PWM clock %s kHz, output frequency %u Hz\n", 1096 + dev_dbg(dev, "PWM clock %s kHz, output frequency %u Hz\n", 1104 1097 (data->config_fan & 0x08) ? "1.4" : "360", 1105 1098 ((data->config_fan & 0x08) ? 700 : 180000) / data->pwm1_freq); 1106 - dev_dbg(&client->dev, "PWM output active %s, %s mode\n", 1099 + dev_dbg(dev, "PWM output active %s, %s mode\n", 1107 1100 (data->config_fan & 0x10) ? "low" : "high", 1108 1101 (data->config_fan & 0x20) ? "manual" : "auto"); 1109 1102 } ··· 1111 1104 static int lm63_probe(struct i2c_client *client, 1112 1105 const struct i2c_device_id *id) 1113 1106 { 1107 + struct device *dev = &client->dev; 1108 + struct device *hwmon_dev; 1114 1109 struct lm63_data *data; 1115 - int err; 1110 + int groups = 0; 1116 1111 1117 - data = devm_kzalloc(&client->dev, sizeof(struct lm63_data), GFP_KERNEL); 1112 + data = devm_kzalloc(dev, sizeof(struct lm63_data), GFP_KERNEL); 1118 1113 if (!data) 1119 1114 return -ENOMEM; 1120 1115 1121 - i2c_set_clientdata(client, data); 1122 - data->valid = 0; 1116 + data->client = client; 1123 1117 mutex_init(&data->update_lock); 1124 1118 1125 1119 /* Set the device type */ ··· 1129 1121 data->temp2_offset = 16000; 1130 1122 1131 1123 /* Initialize chip */ 1132 - lm63_init_client(client); 1124 + lm63_init_client(data); 1133 1125 1134 1126 /* Register sysfs hooks */ 1135 - err = sysfs_create_group(&client->dev.kobj, &lm63_group); 1136 - if (err) 1137 - return err; 1138 - if (data->config & 0x04) { /* tachometer enabled */ 1139 - err = sysfs_create_group(&client->dev.kobj, &lm63_group_fan1); 1140 - if (err) 1141 - goto exit_remove_files; 1142 - } 1127 + data->groups[groups++] = &lm63_group; 1128 + if (data->config & 0x04) /* tachometer enabled */ 1129 + data->groups[groups++] = &lm63_group_fan1; 1130 + 1143 1131 if (data->kind == lm96163) { 1144 - err = device_create_file(&client->dev, &dev_attr_temp2_type); 1145 - if (err) 1146 - goto exit_remove_files; 1147 - 1148 - err = sysfs_create_group(&client->dev.kobj, 1149 - &lm63_group_extra_lut); 1150 - if (err) 1151 - goto exit_remove_files; 1132 + data->groups[groups++] = &lm63_group_temp2_type; 1133 + data->groups[groups++] = &lm63_group_extra_lut; 1152 1134 } 1153 1135 1154 - data->hwmon_dev = hwmon_device_register(&client->dev); 1155 - if (IS_ERR(data->hwmon_dev)) { 1156 - err = PTR_ERR(data->hwmon_dev); 1157 - goto exit_remove_files; 1158 - } 1159 - 1160 - return 0; 1161 - 1162 - exit_remove_files: 1163 - sysfs_remove_group(&client->dev.kobj, &lm63_group); 1164 - sysfs_remove_group(&client->dev.kobj, &lm63_group_fan1); 1165 - if (data->kind == lm96163) { 1166 - device_remove_file(&client->dev, &dev_attr_temp2_type); 1167 - sysfs_remove_group(&client->dev.kobj, &lm63_group_extra_lut); 1168 - } 1169 - return err; 1170 - } 1171 - 1172 - static int lm63_remove(struct i2c_client *client) 1173 - { 1174 - struct lm63_data *data = i2c_get_clientdata(client); 1175 - 1176 - hwmon_device_unregister(data->hwmon_dev); 1177 - sysfs_remove_group(&client->dev.kobj, &lm63_group); 1178 - sysfs_remove_group(&client->dev.kobj, &lm63_group_fan1); 1179 - if (data->kind == lm96163) { 1180 - device_remove_file(&client->dev, &dev_attr_temp2_type); 1181 - sysfs_remove_group(&client->dev.kobj, &lm63_group_extra_lut); 1182 - } 1183 - 1184 - return 0; 1136 + hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, 1137 + data, data->groups); 1138 + return PTR_ERR_OR_ZERO(hwmon_dev); 1185 1139 } 1186 1140 1187 1141 /* ··· 1164 1194 .name = "lm63", 1165 1195 }, 1166 1196 .probe = lm63_probe, 1167 - .remove = lm63_remove, 1168 1197 .id_table = lm63_id, 1169 1198 .detect = lm63_detect, 1170 1199 .address_list = normal_i2c,
-1
drivers/hwmon/lm77.c
··· 348 348 return -ENOMEM; 349 349 350 350 i2c_set_clientdata(client, data); 351 - data->valid = 0; 352 351 mutex_init(&data->update_lock); 353 352 354 353 /* Initialize the LM77 chip */
+22 -48
drivers/hwmon/lm80.c
··· 112 112 */ 113 113 114 114 struct lm80_data { 115 - struct device *hwmon_dev; 115 + struct i2c_client *client; 116 116 struct mutex update_lock; 117 117 char error; /* !=0 if error occurred during last update */ 118 118 char valid; /* !=0 if following fields are valid */ ··· 140 140 const struct i2c_device_id *id); 141 141 static int lm80_detect(struct i2c_client *client, struct i2c_board_info *info); 142 142 static void lm80_init_client(struct i2c_client *client); 143 - static int lm80_remove(struct i2c_client *client); 144 143 static struct lm80_data *lm80_update_device(struct device *dev); 145 144 static int lm80_read_value(struct i2c_client *client, u8 reg); 146 145 static int lm80_write_value(struct i2c_client *client, u8 reg, u8 value); ··· 161 162 .name = "lm80", 162 163 }, 163 164 .probe = lm80_probe, 164 - .remove = lm80_remove, 165 165 .id_table = lm80_id, 166 166 .detect = lm80_detect, 167 167 .address_list = normal_i2c, ··· 189 191 struct device_attribute *attr, const char *buf, size_t count) \ 190 192 { \ 191 193 int nr = to_sensor_dev_attr(attr)->index; \ 192 - struct i2c_client *client = to_i2c_client(dev); \ 193 - struct lm80_data *data = i2c_get_clientdata(client); \ 194 + struct lm80_data *data = dev_get_drvdata(dev); \ 195 + struct i2c_client *client = data->client; \ 194 196 long val; \ 195 197 int err = kstrtol(buf, 10, &val); \ 196 198 if (err < 0) \ ··· 233 235 const char *buf, size_t count) 234 236 { 235 237 int nr = to_sensor_dev_attr(attr)->index; 236 - struct i2c_client *client = to_i2c_client(dev); 237 - struct lm80_data *data = i2c_get_clientdata(client); 238 + struct lm80_data *data = dev_get_drvdata(dev); 239 + struct i2c_client *client = data->client; 238 240 unsigned long val; 239 241 int err = kstrtoul(buf, 10, &val); 240 242 if (err < 0) ··· 257 259 const char *buf, size_t count) 258 260 { 259 261 int nr = to_sensor_dev_attr(attr)->index; 260 - struct i2c_client *client = to_i2c_client(dev); 261 - struct lm80_data *data = i2c_get_clientdata(client); 262 + struct lm80_data *data = dev_get_drvdata(dev); 263 + struct i2c_client *client = data->client; 262 264 unsigned long min, val; 263 265 u8 reg; 264 266 int err = kstrtoul(buf, 10, &val); ··· 284 286 data->fan_div[nr] = 3; 285 287 break; 286 288 default: 287 - dev_err(&client->dev, 289 + dev_err(dev, 288 290 "fan_div value %ld not supported. Choose one of 1, 2, 4 or 8!\n", 289 291 val); 290 292 mutex_unlock(&data->update_lock); ··· 330 332 static ssize_t set_temp_##suffix(struct device *dev, \ 331 333 struct device_attribute *attr, const char *buf, size_t count) \ 332 334 { \ 333 - struct i2c_client *client = to_i2c_client(dev); \ 334 - struct lm80_data *data = i2c_get_clientdata(client); \ 335 + struct lm80_data *data = dev_get_drvdata(dev); \ 336 + struct i2c_client *client = data->client; \ 335 337 long val; \ 336 338 int err = kstrtol(buf, 10, &val); \ 337 339 if (err < 0) \ ··· 438 440 * Real code 439 441 */ 440 442 441 - static struct attribute *lm80_attributes[] = { 443 + static struct attribute *lm80_attrs[] = { 442 444 &sensor_dev_attr_in0_min.dev_attr.attr, 443 445 &sensor_dev_attr_in1_min.dev_attr.attr, 444 446 &sensor_dev_attr_in2_min.dev_attr.attr, ··· 485 487 &sensor_dev_attr_temp1_crit_alarm.dev_attr.attr, 486 488 NULL 487 489 }; 488 - 489 - static const struct attribute_group lm80_group = { 490 - .attrs = lm80_attributes, 491 - }; 490 + ATTRIBUTE_GROUPS(lm80); 492 491 493 492 /* Return 0 if detection is successful, -ENODEV otherwise */ 494 493 static int lm80_detect(struct i2c_client *client, struct i2c_board_info *info) ··· 536 541 static int lm80_probe(struct i2c_client *client, 537 542 const struct i2c_device_id *id) 538 543 { 544 + struct device *dev = &client->dev; 545 + struct device *hwmon_dev; 539 546 struct lm80_data *data; 540 - int err; 541 547 542 - data = devm_kzalloc(&client->dev, sizeof(struct lm80_data), GFP_KERNEL); 548 + data = devm_kzalloc(dev, sizeof(struct lm80_data), GFP_KERNEL); 543 549 if (!data) 544 550 return -ENOMEM; 545 551 546 - i2c_set_clientdata(client, data); 552 + data->client = client; 547 553 mutex_init(&data->update_lock); 548 554 549 555 /* Initialize the LM80 chip */ ··· 554 558 data->fan_min[0] = lm80_read_value(client, LM80_REG_FAN_MIN(1)); 555 559 data->fan_min[1] = lm80_read_value(client, LM80_REG_FAN_MIN(2)); 556 560 557 - /* Register sysfs hooks */ 558 - err = sysfs_create_group(&client->dev.kobj, &lm80_group); 559 - if (err) 560 - return err; 561 + hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, 562 + data, lm80_groups); 561 563 562 - data->hwmon_dev = hwmon_device_register(&client->dev); 563 - if (IS_ERR(data->hwmon_dev)) { 564 - err = PTR_ERR(data->hwmon_dev); 565 - goto error_remove; 566 - } 567 - 568 - return 0; 569 - 570 - error_remove: 571 - sysfs_remove_group(&client->dev.kobj, &lm80_group); 572 - return err; 573 - } 574 - 575 - static int lm80_remove(struct i2c_client *client) 576 - { 577 - struct lm80_data *data = i2c_get_clientdata(client); 578 - 579 - hwmon_device_unregister(data->hwmon_dev); 580 - sysfs_remove_group(&client->dev.kobj, &lm80_group); 581 - 582 - return 0; 564 + return PTR_ERR_OR_ZERO(hwmon_dev); 583 565 } 584 566 585 567 static int lm80_read_value(struct i2c_client *client, u8 reg) ··· 588 614 589 615 static struct lm80_data *lm80_update_device(struct device *dev) 590 616 { 591 - struct i2c_client *client = to_i2c_client(dev); 592 - struct lm80_data *data = i2c_get_clientdata(client); 617 + struct lm80_data *data = dev_get_drvdata(dev); 618 + struct i2c_client *client = data->client; 593 619 int i; 594 620 int rv; 595 621 int prev_rv; ··· 601 627 lm80_init_client(client); 602 628 603 629 if (time_after(jiffies, data->last_updated + 2 * HZ) || !data->valid) { 604 - dev_dbg(&client->dev, "Starting lm80 update\n"); 630 + dev_dbg(dev, "Starting lm80 update\n"); 605 631 for (i = 0; i <= 6; i++) { 606 632 rv = lm80_read_value(client, LM80_REG_IN(i)); 607 633 if (rv < 0)
-1
drivers/hwmon/lm83.c
··· 349 349 return -ENOMEM; 350 350 351 351 i2c_set_clientdata(new_client, data); 352 - data->valid = 0; 353 352 mutex_init(&data->update_lock); 354 353 355 354 /*
-1
drivers/hwmon/lm87.c
··· 903 903 return -ENOMEM; 904 904 905 905 i2c_set_clientdata(client, data); 906 - data->valid = 0; 907 906 mutex_init(&data->update_lock); 908 907 909 908 /* Initialize the LM87 chip */
+48 -63
drivers/hwmon/lm90.c
··· 365 365 */ 366 366 367 367 struct lm90_data { 368 + struct i2c_client *client; 368 369 struct device *hwmon_dev; 370 + const struct attribute_group *groups[6]; 369 371 struct mutex update_lock; 370 372 struct regulator *regulator; 371 373 char valid; /* zero until following fields are valid */ ··· 515 513 516 514 static struct lm90_data *lm90_update_device(struct device *dev) 517 515 { 518 - struct i2c_client *client = to_i2c_client(dev); 519 - struct lm90_data *data = i2c_get_clientdata(client); 516 + struct lm90_data *data = dev_get_drvdata(dev); 517 + struct i2c_client *client = data->client; 520 518 unsigned long next_update; 521 519 522 520 mutex_lock(&data->update_lock); ··· 795 793 }; 796 794 797 795 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 798 - struct i2c_client *client = to_i2c_client(dev); 799 - struct lm90_data *data = i2c_get_clientdata(client); 796 + struct lm90_data *data = dev_get_drvdata(dev); 797 + struct i2c_client *client = data->client; 800 798 int nr = attr->index; 801 799 long val; 802 800 int err; ··· 862 860 }; 863 861 864 862 struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr); 865 - struct i2c_client *client = to_i2c_client(dev); 866 - struct lm90_data *data = i2c_get_clientdata(client); 863 + struct lm90_data *data = dev_get_drvdata(dev); 864 + struct i2c_client *client = data->client; 867 865 int nr = attr->nr; 868 866 int index = attr->index; 869 867 long val; ··· 924 922 static ssize_t set_temphyst(struct device *dev, struct device_attribute *dummy, 925 923 const char *buf, size_t count) 926 924 { 927 - struct i2c_client *client = to_i2c_client(dev); 928 - struct lm90_data *data = i2c_get_clientdata(client); 925 + struct lm90_data *data = dev_get_drvdata(dev); 926 + struct i2c_client *client = data->client; 929 927 long val; 930 928 int err; 931 929 int temp; ··· 978 976 struct device_attribute *attr, 979 977 const char *buf, size_t count) 980 978 { 981 - struct i2c_client *client = to_i2c_client(dev); 982 - struct lm90_data *data = i2c_get_clientdata(client); 979 + struct lm90_data *data = dev_get_drvdata(dev); 980 + struct i2c_client *client = data->client; 983 981 unsigned long val; 984 982 int err; 985 983 ··· 1057 1055 1058 1056 static const struct attribute_group lm90_group = { 1059 1057 .attrs = lm90_attributes, 1058 + }; 1059 + 1060 + static struct attribute *lm90_temp2_offset_attributes[] = { 1061 + &sensor_dev_attr_temp2_offset.dev_attr.attr, 1062 + NULL 1063 + }; 1064 + 1065 + static const struct attribute_group lm90_temp2_offset_group = { 1066 + .attrs = lm90_temp2_offset_attributes, 1060 1067 }; 1061 1068 1062 1069 /* ··· 1404 1393 return 0; 1405 1394 } 1406 1395 1407 - static void lm90_remove_files(struct i2c_client *client, struct lm90_data *data) 1408 - { 1409 - struct device *dev = &client->dev; 1410 - 1411 - if (data->flags & LM90_HAVE_TEMP3) 1412 - sysfs_remove_group(&dev->kobj, &lm90_temp3_group); 1413 - if (data->flags & LM90_HAVE_EMERGENCY_ALARM) 1414 - sysfs_remove_group(&dev->kobj, &lm90_emergency_alarm_group); 1415 - if (data->flags & LM90_HAVE_EMERGENCY) 1416 - sysfs_remove_group(&dev->kobj, &lm90_emergency_group); 1417 - if (data->flags & LM90_HAVE_OFFSET) 1418 - device_remove_file(dev, &sensor_dev_attr_temp2_offset.dev_attr); 1419 - device_remove_file(dev, &dev_attr_pec); 1420 - sysfs_remove_group(&dev->kobj, &lm90_group); 1421 - } 1422 - 1423 1396 static void lm90_restore_conf(struct i2c_client *client, struct lm90_data *data) 1424 1397 { 1425 1398 /* Restore initial configuration */ ··· 1413 1418 data->config_orig); 1414 1419 } 1415 1420 1416 - static void lm90_init_client(struct i2c_client *client) 1421 + static void lm90_init_client(struct i2c_client *client, struct lm90_data *data) 1417 1422 { 1418 1423 u8 config, convrate; 1419 - struct lm90_data *data = i2c_get_clientdata(client); 1420 1424 1421 1425 if (lm90_read_reg(client, LM90_REG_R_CONVRATE, &convrate) < 0) { 1422 1426 dev_warn(&client->dev, "Failed to read convrate register!\n"); ··· 1513 1519 struct i2c_adapter *adapter = to_i2c_adapter(dev->parent); 1514 1520 struct lm90_data *data; 1515 1521 struct regulator *regulator; 1522 + int groups = 0; 1516 1523 int err; 1517 1524 1518 1525 regulator = devm_regulator_get(dev, "vcc"); ··· 1522 1527 1523 1528 err = regulator_enable(regulator); 1524 1529 if (err < 0) { 1525 - dev_err(&client->dev, 1526 - "Failed to enable regulator: %d\n", err); 1530 + dev_err(dev, "Failed to enable regulator: %d\n", err); 1527 1531 return err; 1528 1532 } 1529 1533 1530 - data = devm_kzalloc(&client->dev, sizeof(struct lm90_data), GFP_KERNEL); 1534 + data = devm_kzalloc(dev, sizeof(struct lm90_data), GFP_KERNEL); 1531 1535 if (!data) 1532 1536 return -ENOMEM; 1533 1537 1538 + data->client = client; 1534 1539 i2c_set_clientdata(client, data); 1535 1540 mutex_init(&data->update_lock); 1536 1541 ··· 1557 1562 data->max_convrate = lm90_params[data->kind].max_convrate; 1558 1563 1559 1564 /* Initialize the LM90 chip */ 1560 - lm90_init_client(client); 1565 + lm90_init_client(client, data); 1561 1566 1562 1567 /* Register sysfs hooks */ 1563 - err = sysfs_create_group(&dev->kobj, &lm90_group); 1564 - if (err) 1565 - goto exit_restore; 1568 + data->groups[groups++] = &lm90_group; 1569 + 1570 + if (data->flags & LM90_HAVE_OFFSET) 1571 + data->groups[groups++] = &lm90_temp2_offset_group; 1572 + 1573 + if (data->flags & LM90_HAVE_EMERGENCY) 1574 + data->groups[groups++] = &lm90_emergency_group; 1575 + 1576 + if (data->flags & LM90_HAVE_EMERGENCY_ALARM) 1577 + data->groups[groups++] = &lm90_emergency_alarm_group; 1578 + 1579 + if (data->flags & LM90_HAVE_TEMP3) 1580 + data->groups[groups++] = &lm90_temp3_group; 1581 + 1566 1582 if (client->flags & I2C_CLIENT_PEC) { 1567 1583 err = device_create_file(dev, &dev_attr_pec); 1568 1584 if (err) 1569 - goto exit_remove_files; 1570 - } 1571 - if (data->flags & LM90_HAVE_OFFSET) { 1572 - err = device_create_file(dev, 1573 - &sensor_dev_attr_temp2_offset.dev_attr); 1574 - if (err) 1575 - goto exit_remove_files; 1576 - } 1577 - if (data->flags & LM90_HAVE_EMERGENCY) { 1578 - err = sysfs_create_group(&dev->kobj, &lm90_emergency_group); 1579 - if (err) 1580 - goto exit_remove_files; 1581 - } 1582 - if (data->flags & LM90_HAVE_EMERGENCY_ALARM) { 1583 - err = sysfs_create_group(&dev->kobj, 1584 - &lm90_emergency_alarm_group); 1585 - if (err) 1586 - goto exit_remove_files; 1587 - } 1588 - if (data->flags & LM90_HAVE_TEMP3) { 1589 - err = sysfs_create_group(&dev->kobj, &lm90_temp3_group); 1590 - if (err) 1591 - goto exit_remove_files; 1585 + goto exit_restore; 1592 1586 } 1593 1587 1594 - data->hwmon_dev = hwmon_device_register(dev); 1588 + data->hwmon_dev = hwmon_device_register_with_groups(dev, client->name, 1589 + data, data->groups); 1595 1590 if (IS_ERR(data->hwmon_dev)) { 1596 1591 err = PTR_ERR(data->hwmon_dev); 1597 - goto exit_remove_files; 1592 + goto exit_remove_pec; 1598 1593 } 1599 1594 1600 1595 if (client->irq) { ··· 1603 1618 1604 1619 exit_unregister: 1605 1620 hwmon_device_unregister(data->hwmon_dev); 1606 - exit_remove_files: 1607 - lm90_remove_files(client, data); 1621 + exit_remove_pec: 1622 + device_remove_file(dev, &dev_attr_pec); 1608 1623 exit_restore: 1609 1624 lm90_restore_conf(client, data); 1610 1625 regulator_disable(data->regulator); ··· 1617 1632 struct lm90_data *data = i2c_get_clientdata(client); 1618 1633 1619 1634 hwmon_device_unregister(data->hwmon_dev); 1620 - lm90_remove_files(client, data); 1635 + device_remove_file(&client->dev, &dev_attr_pec); 1621 1636 lm90_restore_conf(client, data); 1622 1637 regulator_disable(data->regulator); 1623 1638
-1
drivers/hwmon/lm92.c
··· 380 380 return -ENOMEM; 381 381 382 382 i2c_set_clientdata(new_client, data); 383 - data->valid = 0; 384 383 mutex_init(&data->update_lock); 385 384 386 385 /* Initialize the chipset */
-1
drivers/hwmon/lm93.c
··· 2754 2754 i2c_set_clientdata(client, data); 2755 2755 2756 2756 /* housekeeping */ 2757 - data->valid = 0; 2758 2757 data->update = update; 2759 2758 mutex_init(&data->update_lock); 2760 2759
-1
drivers/hwmon/max1619.c
··· 273 273 return -ENOMEM; 274 274 275 275 i2c_set_clientdata(new_client, data); 276 - data->valid = 0; 277 276 mutex_init(&data->update_lock); 278 277 279 278 /* Initialize the MAX1619 chip */
+6 -6
drivers/hwmon/pc87360.c
··· 1225 1225 int i; 1226 1226 struct pc87360_data *data; 1227 1227 int err = 0; 1228 - const char *name = "pc87360"; 1228 + const char *name; 1229 1229 int use_thermistors = 0; 1230 1230 struct device *dev = &pdev->dev; 1231 1231 ··· 1233 1233 if (!data) 1234 1234 return -ENOMEM; 1235 1235 1236 - data->fannr = 2; 1237 - data->innr = 0; 1238 - data->tempnr = 0; 1239 - 1240 1236 switch (devid) { 1237 + default: 1238 + name = "pc87360"; 1239 + data->fannr = 2; 1240 + break; 1241 1241 case 0xe8: 1242 1242 name = "pc87363"; 1243 + data->fannr = 2; 1243 1244 break; 1244 1245 case 0xe4: 1245 1246 name = "pc87364"; ··· 1261 1260 } 1262 1261 1263 1262 data->name = name; 1264 - data->valid = 0; 1265 1263 mutex_init(&data->lock); 1266 1264 mutex_init(&data->update_lock); 1267 1265 platform_set_drvdata(pdev, data);
-1
drivers/hwmon/w83792d.c
··· 1376 1376 return -ENOMEM; 1377 1377 1378 1378 i2c_set_clientdata(client, data); 1379 - data->valid = 0; 1380 1379 mutex_init(&data->update_lock); 1381 1380 1382 1381 err = w83792d_detect_subclients(client);
-4
drivers/hwmon/w83l785ts.c
··· 188 188 return -ENOMEM; 189 189 190 190 i2c_set_clientdata(client, data); 191 - data->valid = 0; 192 191 mutex_init(&data->update_lock); 193 - 194 - /* Default values in case the first read fails (unlikely). */ 195 - data->temp[1] = data->temp[0] = 0; 196 192 197 193 /* 198 194 * Initialize the W83L785TS chip