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

hwmon: (lm83) Convert to use devm_hwmon_device_register_with_groups

Use devm_hwmon_device_register_with_groups API to attach attributes
to hwmon device, simplify code, and reduce code size.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>

+15 -42
+15 -42
drivers/hwmon/lm83.c
··· 111 111 */ 112 112 113 113 struct lm83_data { 114 - struct device *hwmon_dev; 114 + struct i2c_client *client; 115 + const struct attribute_group *groups[3]; 115 116 struct mutex update_lock; 116 117 char valid; /* zero until following fields are valid */ 117 118 unsigned long last_updated; /* in jiffies */ ··· 126 125 127 126 static struct lm83_data *lm83_update_device(struct device *dev) 128 127 { 129 - struct i2c_client *client = to_i2c_client(dev); 130 - struct lm83_data *data = i2c_get_clientdata(client); 128 + struct lm83_data *data = dev_get_drvdata(dev); 129 + struct i2c_client *client = data->client; 131 130 132 131 mutex_lock(&data->update_lock); 133 132 ··· 170 169 const char *buf, size_t count) 171 170 { 172 171 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 173 - struct i2c_client *client = to_i2c_client(dev); 174 - struct lm83_data *data = i2c_get_clientdata(client); 172 + struct lm83_data *data = dev_get_drvdata(dev); 173 + struct i2c_client *client = data->client; 175 174 long val; 176 175 int nr = attr->index; 177 176 int err; ··· 333 332 static int lm83_probe(struct i2c_client *new_client, 334 333 const struct i2c_device_id *id) 335 334 { 335 + struct device *hwmon_dev; 336 336 struct lm83_data *data; 337 - int err; 338 337 339 338 data = devm_kzalloc(&new_client->dev, sizeof(struct lm83_data), 340 339 GFP_KERNEL); 341 340 if (!data) 342 341 return -ENOMEM; 343 342 344 - i2c_set_clientdata(new_client, data); 343 + data->client = new_client; 345 344 mutex_init(&data->update_lock); 346 345 347 346 /* ··· 350 349 * at the same register as the LM83 temp3 entry - so we 351 350 * declare 1 and 3 common, and then 2 and 4 only for the LM83. 352 351 */ 352 + data->groups[0] = &lm83_group; 353 + if (id->driver_data == lm83) 354 + data->groups[1] = &lm83_group_opt; 353 355 354 - err = sysfs_create_group(&new_client->dev.kobj, &lm83_group); 355 - if (err) 356 - return err; 357 - 358 - if (id->driver_data == lm83) { 359 - err = sysfs_create_group(&new_client->dev.kobj, 360 - &lm83_group_opt); 361 - if (err) 362 - goto exit_remove_files; 363 - } 364 - 365 - data->hwmon_dev = hwmon_device_register(&new_client->dev); 366 - if (IS_ERR(data->hwmon_dev)) { 367 - err = PTR_ERR(data->hwmon_dev); 368 - goto exit_remove_files; 369 - } 370 - 371 - return 0; 372 - 373 - exit_remove_files: 374 - sysfs_remove_group(&new_client->dev.kobj, &lm83_group); 375 - sysfs_remove_group(&new_client->dev.kobj, &lm83_group_opt); 376 - return err; 377 - } 378 - 379 - static int lm83_remove(struct i2c_client *client) 380 - { 381 - struct lm83_data *data = i2c_get_clientdata(client); 382 - 383 - hwmon_device_unregister(data->hwmon_dev); 384 - sysfs_remove_group(&client->dev.kobj, &lm83_group); 385 - sysfs_remove_group(&client->dev.kobj, &lm83_group_opt); 386 - 387 - return 0; 356 + hwmon_dev = devm_hwmon_device_register_with_groups(&new_client->dev, 357 + new_client->name, 358 + data, data->groups); 359 + return PTR_ERR_OR_ZERO(hwmon_dev); 388 360 } 389 361 390 362 /* ··· 377 403 .name = "lm83", 378 404 }, 379 405 .probe = lm83_probe, 380 - .remove = lm83_remove, 381 406 .id_table = lm83_id, 382 407 .detect = lm83_detect, 383 408 .address_list = normal_i2c,