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

hwmon: (max6642) Convert to use devm_hwmon_device_register_with_groups

Also rename new_client variable to client and introduce
new variable dev pointing to client->dev in the probe function,
and use new macro ATTRIBUTE_GROUPS to declare attribute groups.

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

+24 -48
+24 -48
drivers/hwmon/max6642.c
··· 87 87 */ 88 88 89 89 struct max6642_data { 90 - struct device *hwmon_dev; 90 + struct i2c_client *client; 91 91 struct mutex update_lock; 92 92 bool valid; /* zero until following fields are valid */ 93 93 unsigned long last_updated; /* in jiffies */ ··· 102 102 * Real code 103 103 */ 104 104 105 - static void max6642_init_client(struct i2c_client *client) 105 + static void max6642_init_client(struct max6642_data *data, 106 + struct i2c_client *client) 106 107 { 107 108 u8 config; 108 - struct max6642_data *data = i2c_get_clientdata(client); 109 109 110 110 /* 111 111 * Start the conversions. ··· 168 168 169 169 static struct max6642_data *max6642_update_device(struct device *dev) 170 170 { 171 - struct i2c_client *client = to_i2c_client(dev); 172 - struct max6642_data *data = i2c_get_clientdata(client); 171 + struct max6642_data *data = dev_get_drvdata(dev); 172 + struct i2c_client *client = data->client; 173 173 u16 val, tmp; 174 174 175 175 mutex_lock(&data->update_lock); 176 176 177 177 if (time_after(jiffies, data->last_updated + HZ) || !data->valid) { 178 - dev_dbg(&client->dev, "Updating max6642 data.\n"); 178 + dev_dbg(dev, "Updating max6642 data.\n"); 179 179 val = i2c_smbus_read_byte_data(client, 180 180 MAX6642_REG_R_LOCAL_TEMPL); 181 181 tmp = (val >> 6) & 3; ··· 209 209 static ssize_t show_temp_max10(struct device *dev, 210 210 struct device_attribute *dev_attr, char *buf) 211 211 { 212 - struct max6642_data *data = max6642_update_device(dev); 213 212 struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr); 213 + struct max6642_data *data = max6642_update_device(dev); 214 214 215 215 return sprintf(buf, "%d\n", 216 216 temp_from_reg10(data->temp_input[attr->index])); ··· 219 219 static ssize_t show_temp_max(struct device *dev, struct device_attribute *attr, 220 220 char *buf) 221 221 { 222 - struct max6642_data *data = max6642_update_device(dev); 223 222 struct sensor_device_attribute_2 *attr2 = to_sensor_dev_attr_2(attr); 223 + struct max6642_data *data = max6642_update_device(dev); 224 224 225 225 return sprintf(buf, "%d\n", temp_from_reg(data->temp_high[attr2->nr])); 226 226 } ··· 228 228 static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr, 229 229 const char *buf, size_t count) 230 230 { 231 + struct sensor_device_attribute_2 *attr2 = to_sensor_dev_attr_2(attr); 232 + struct max6642_data *data = dev_get_drvdata(dev); 231 233 unsigned long val; 232 234 int err; 233 - struct i2c_client *client = to_i2c_client(dev); 234 - struct max6642_data *data = i2c_get_clientdata(client); 235 - struct sensor_device_attribute_2 *attr2 = to_sensor_dev_attr_2(attr); 236 235 237 236 err = kstrtoul(buf, 10, &val); 238 237 if (err < 0) ··· 239 240 240 241 mutex_lock(&data->update_lock); 241 242 data->temp_high[attr2->nr] = clamp_val(temp_to_reg(val), 0, 255); 242 - i2c_smbus_write_byte_data(client, attr2->index, 243 + i2c_smbus_write_byte_data(data->client, attr2->index, 243 244 data->temp_high[attr2->nr]); 244 245 mutex_unlock(&data->update_lock); 245 246 return count; ··· 263 264 static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 6); 264 265 static SENSOR_DEVICE_ATTR(temp2_max_alarm, S_IRUGO, show_alarm, NULL, 4); 265 266 266 - static struct attribute *max6642_attributes[] = { 267 + static struct attribute *max6642_attrs[] = { 267 268 &sensor_dev_attr_temp1_input.dev_attr.attr, 268 269 &sensor_dev_attr_temp2_input.dev_attr.attr, 269 270 &sensor_dev_attr_temp1_max.dev_attr.attr, ··· 274 275 &sensor_dev_attr_temp2_max_alarm.dev_attr.attr, 275 276 NULL 276 277 }; 278 + ATTRIBUTE_GROUPS(max6642); 277 279 278 - static const struct attribute_group max6642_group = { 279 - .attrs = max6642_attributes, 280 - }; 281 - 282 - static int max6642_probe(struct i2c_client *new_client, 280 + static int max6642_probe(struct i2c_client *client, 283 281 const struct i2c_device_id *id) 284 282 { 283 + struct device *dev = &client->dev; 285 284 struct max6642_data *data; 286 - int err; 285 + struct device *hwmon_dev; 287 286 288 - data = devm_kzalloc(&new_client->dev, sizeof(struct max6642_data), 289 - GFP_KERNEL); 287 + data = devm_kzalloc(dev, sizeof(struct max6642_data), GFP_KERNEL); 290 288 if (!data) 291 289 return -ENOMEM; 292 290 293 - i2c_set_clientdata(new_client, data); 291 + data->client = client; 294 292 mutex_init(&data->update_lock); 295 293 296 294 /* Initialize the MAX6642 chip */ 297 - max6642_init_client(new_client); 295 + max6642_init_client(data, client); 298 296 299 - /* Register sysfs hooks */ 300 - err = sysfs_create_group(&new_client->dev.kobj, &max6642_group); 301 - if (err) 302 - return err; 303 - 304 - data->hwmon_dev = hwmon_device_register(&new_client->dev); 305 - if (IS_ERR(data->hwmon_dev)) { 306 - err = PTR_ERR(data->hwmon_dev); 307 - goto exit_remove_files; 308 - } 309 - 310 - return 0; 311 - 312 - exit_remove_files: 313 - sysfs_remove_group(&new_client->dev.kobj, &max6642_group); 314 - return err; 315 - } 316 - 317 - static int max6642_remove(struct i2c_client *client) 318 - { 319 - struct max6642_data *data = i2c_get_clientdata(client); 320 - 321 - hwmon_device_unregister(data->hwmon_dev); 322 - sysfs_remove_group(&client->dev.kobj, &max6642_group); 297 + hwmon_dev = devm_hwmon_device_register_with_groups(&client->dev, 298 + client->name, data, 299 + max6642_groups); 300 + if (IS_ERR(hwmon_dev)) 301 + return PTR_ERR(hwmon_dev); 323 302 324 303 return 0; 325 304 } ··· 318 341 .name = "max6642", 319 342 }, 320 343 .probe = max6642_probe, 321 - .remove = max6642_remove, 322 344 .id_table = max6642_id, 323 345 .detect = max6642_detect, 324 346 .address_list = normal_i2c,