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

hwmon: (adt7411) 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
eac83cd9 398e16db

+20 -39
+20 -39
drivers/hwmon/adt7411.c
··· 51 51 struct mutex update_lock; 52 52 unsigned long next_update; 53 53 int vref_cached; 54 - struct device *hwmon_dev; 54 + struct i2c_client *client; 55 55 }; 56 56 57 57 /* ··· 111 111 static ssize_t adt7411_show_vdd(struct device *dev, 112 112 struct device_attribute *attr, char *buf) 113 113 { 114 - struct i2c_client *client = to_i2c_client(dev); 114 + struct adt7411_data *data = dev_get_drvdata(dev); 115 + struct i2c_client *client = data->client; 115 116 int ret = adt7411_read_10_bit(client, ADT7411_REG_INT_TEMP_VDD_LSB, 116 117 ADT7411_REG_VDD_MSB, 2); 117 118 ··· 122 121 static ssize_t adt7411_show_temp(struct device *dev, 123 122 struct device_attribute *attr, char *buf) 124 123 { 125 - struct i2c_client *client = to_i2c_client(dev); 124 + struct adt7411_data *data = dev_get_drvdata(dev); 125 + struct i2c_client *client = data->client; 126 126 int val = adt7411_read_10_bit(client, ADT7411_REG_INT_TEMP_VDD_LSB, 127 127 ADT7411_REG_INT_TEMP_MSB, 0); 128 128 ··· 139 137 struct device_attribute *attr, char *buf) 140 138 { 141 139 int nr = to_sensor_dev_attr(attr)->index; 142 - struct i2c_client *client = to_i2c_client(dev); 143 - struct adt7411_data *data = i2c_get_clientdata(client); 140 + struct adt7411_data *data = dev_get_drvdata(dev); 141 + struct i2c_client *client = data->client; 144 142 int val; 145 143 u8 lsb_reg, lsb_shift; 146 144 ··· 182 180 struct device_attribute *attr, char *buf) 183 181 { 184 182 struct sensor_device_attribute_2 *attr2 = to_sensor_dev_attr_2(attr); 185 - struct i2c_client *client = to_i2c_client(dev); 183 + struct adt7411_data *data = dev_get_drvdata(dev); 184 + struct i2c_client *client = data->client; 186 185 int ret = i2c_smbus_read_byte_data(client, attr2->index); 187 186 188 187 return ret < 0 ? ret : sprintf(buf, "%u\n", !!(ret & attr2->nr)); ··· 194 191 size_t count) 195 192 { 196 193 struct sensor_device_attribute_2 *s_attr2 = to_sensor_dev_attr_2(attr); 197 - struct i2c_client *client = to_i2c_client(dev); 198 - struct adt7411_data *data = i2c_get_clientdata(client); 194 + struct adt7411_data *data = dev_get_drvdata(dev); 195 + struct i2c_client *client = data->client; 199 196 int ret; 200 197 unsigned long flag; 201 198 ··· 248 245 NULL 249 246 }; 250 247 251 - static const struct attribute_group adt7411_attr_grp = { 252 - .attrs = adt7411_attrs, 253 - }; 248 + ATTRIBUTE_GROUPS(adt7411); 254 249 255 250 static int adt7411_detect(struct i2c_client *client, 256 251 struct i2c_board_info *info) ··· 282 281 static int adt7411_probe(struct i2c_client *client, 283 282 const struct i2c_device_id *id) 284 283 { 284 + struct device *dev = &client->dev; 285 285 struct adt7411_data *data; 286 + struct device *hwmon_dev; 286 287 int ret; 287 288 288 - data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL); 289 + data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); 289 290 if (!data) 290 291 return -ENOMEM; 291 292 292 293 i2c_set_clientdata(client, data); 294 + data->client = client; 293 295 mutex_init(&data->device_lock); 294 296 mutex_init(&data->update_lock); 295 297 ··· 304 300 /* force update on first occasion */ 305 301 data->next_update = jiffies; 306 302 307 - ret = sysfs_create_group(&client->dev.kobj, &adt7411_attr_grp); 308 - if (ret) 309 - return ret; 310 - 311 - data->hwmon_dev = hwmon_device_register(&client->dev); 312 - if (IS_ERR(data->hwmon_dev)) { 313 - ret = PTR_ERR(data->hwmon_dev); 314 - goto exit_remove; 315 - } 316 - 317 - dev_info(&client->dev, "successfully registered\n"); 318 - 319 - return 0; 320 - 321 - exit_remove: 322 - sysfs_remove_group(&client->dev.kobj, &adt7411_attr_grp); 323 - return ret; 324 - } 325 - 326 - static int adt7411_remove(struct i2c_client *client) 327 - { 328 - struct adt7411_data *data = i2c_get_clientdata(client); 329 - 330 - hwmon_device_unregister(data->hwmon_dev); 331 - sysfs_remove_group(&client->dev.kobj, &adt7411_attr_grp); 332 - return 0; 303 + hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, 304 + data, 305 + adt7411_groups); 306 + return PTR_ERR_OR_ZERO(hwmon_dev); 333 307 } 334 308 335 309 static const struct i2c_device_id adt7411_id[] = { ··· 321 339 .name = "adt7411", 322 340 }, 323 341 .probe = adt7411_probe, 324 - .remove = adt7411_remove, 325 342 .id_table = adt7411_id, 326 343 .detect = adt7411_detect, 327 344 .address_list = normal_i2c,