aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuenter Roeck <linux@roeck-us.net>2013-09-04 19:39:12 -0400
committerGuenter Roeck <linux@roeck-us.net>2013-10-18 12:11:57 -0400
commit9d86bd6ba3ba2f254720e2916dfda64737974963 (patch)
tree12d26e4b22a76308a2db02dd4fc323a96f43e5f9
parentf3643ac7ffd8bf9a3b0bac8e207529d01bebf269 (diff)
hwmon: (lm95234) Convert to use devm_hwmon_device_register_with_groups
Also use new macro ATTRIBUTE_GROUPS to declare attribute groups. Signed-off-by: Guenter Roeck <linux@roeck-us.net>
-rw-r--r--drivers/hwmon/lm95234.c137
1 files changed, 50 insertions, 87 deletions
diff --git a/drivers/hwmon/lm95234.c b/drivers/hwmon/lm95234.c
index 307c9eaeeb9f..cf8750745c88 100644
--- a/drivers/hwmon/lm95234.c
+++ b/drivers/hwmon/lm95234.c
@@ -57,7 +57,7 @@ static const unsigned short normal_i2c[] = { 0x18, 0x4d, 0x4e, I2C_CLIENT_END };
57 57
58/* Client data (each client gets its own) */ 58/* Client data (each client gets its own) */
59struct lm95234_data { 59struct lm95234_data {
60 struct device *hwmon_dev; 60 struct i2c_client *client;
61 struct mutex update_lock; 61 struct mutex update_lock;
62 unsigned long last_updated, interval; /* in jiffies */ 62 unsigned long last_updated, interval; /* in jiffies */
63 bool valid; /* false until following fields are valid */ 63 bool valid; /* false until following fields are valid */
@@ -114,9 +114,9 @@ static u16 update_intervals[] = { 143, 364, 1000, 2500 };
114 114
115/* Fill value cache. Must be called with update lock held. */ 115/* Fill value cache. Must be called with update lock held. */
116 116
117static int lm95234_fill_cache(struct i2c_client *client) 117static int lm95234_fill_cache(struct lm95234_data *data,
118 struct i2c_client *client)
118{ 119{
119 struct lm95234_data *data = i2c_get_clientdata(client);
120 int i, ret; 120 int i, ret;
121 121
122 ret = i2c_smbus_read_byte_data(client, LM95234_REG_CONVRATE); 122 ret = i2c_smbus_read_byte_data(client, LM95234_REG_CONVRATE);
@@ -157,9 +157,9 @@ static int lm95234_fill_cache(struct i2c_client *client)
157 return 0; 157 return 0;
158} 158}
159 159
160static int lm95234_update_device(struct i2c_client *client, 160static int lm95234_update_device(struct lm95234_data *data)
161 struct lm95234_data *data)
162{ 161{
162 struct i2c_client *client = data->client;
163 int ret; 163 int ret;
164 164
165 mutex_lock(&data->update_lock); 165 mutex_lock(&data->update_lock);
@@ -169,7 +169,7 @@ static int lm95234_update_device(struct i2c_client *client,
169 int i; 169 int i;
170 170
171 if (!data->valid) { 171 if (!data->valid) {
172 ret = lm95234_fill_cache(client); 172 ret = lm95234_fill_cache(data, client);
173 if (ret < 0) 173 if (ret < 0)
174 goto abort; 174 goto abort;
175 } 175 }
@@ -209,10 +209,9 @@ abort:
209static ssize_t show_temp(struct device *dev, struct device_attribute *attr, 209static ssize_t show_temp(struct device *dev, struct device_attribute *attr,
210 char *buf) 210 char *buf)
211{ 211{
212 struct i2c_client *client = to_i2c_client(dev); 212 struct lm95234_data *data = dev_get_drvdata(dev);
213 struct lm95234_data *data = i2c_get_clientdata(client);
214 int index = to_sensor_dev_attr(attr)->index; 213 int index = to_sensor_dev_attr(attr)->index;
215 int ret = lm95234_update_device(client, data); 214 int ret = lm95234_update_device(data);
216 215
217 if (ret) 216 if (ret)
218 return ret; 217 return ret;
@@ -224,10 +223,9 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *attr,
224static ssize_t show_alarm(struct device *dev, 223static ssize_t show_alarm(struct device *dev,
225 struct device_attribute *attr, char *buf) 224 struct device_attribute *attr, char *buf)
226{ 225{
227 struct i2c_client *client = to_i2c_client(dev); 226 struct lm95234_data *data = dev_get_drvdata(dev);
228 struct lm95234_data *data = i2c_get_clientdata(client);
229 u32 mask = to_sensor_dev_attr(attr)->index; 227 u32 mask = to_sensor_dev_attr(attr)->index;
230 int ret = lm95234_update_device(client, data); 228 int ret = lm95234_update_device(data);
231 229
232 if (ret) 230 if (ret)
233 return ret; 231 return ret;
@@ -238,10 +236,9 @@ static ssize_t show_alarm(struct device *dev,
238static ssize_t show_type(struct device *dev, struct device_attribute *attr, 236static ssize_t show_type(struct device *dev, struct device_attribute *attr,
239 char *buf) 237 char *buf)
240{ 238{
241 struct i2c_client *client = to_i2c_client(dev); 239 struct lm95234_data *data = dev_get_drvdata(dev);
242 struct lm95234_data *data = i2c_get_clientdata(client);
243 u8 mask = to_sensor_dev_attr(attr)->index; 240 u8 mask = to_sensor_dev_attr(attr)->index;
244 int ret = lm95234_update_device(client, data); 241 int ret = lm95234_update_device(data);
245 242
246 if (ret) 243 if (ret)
247 return ret; 244 return ret;
@@ -252,11 +249,10 @@ static ssize_t show_type(struct device *dev, struct device_attribute *attr,
252static ssize_t set_type(struct device *dev, struct device_attribute *attr, 249static ssize_t set_type(struct device *dev, struct device_attribute *attr,
253 const char *buf, size_t count) 250 const char *buf, size_t count)
254{ 251{
255 struct i2c_client *client = to_i2c_client(dev); 252 struct lm95234_data *data = dev_get_drvdata(dev);
256 struct lm95234_data *data = i2c_get_clientdata(client);
257 unsigned long val; 253 unsigned long val;
258 u8 mask = to_sensor_dev_attr(attr)->index; 254 u8 mask = to_sensor_dev_attr(attr)->index;
259 int ret = lm95234_update_device(client, data); 255 int ret = lm95234_update_device(data);
260 256
261 if (ret) 257 if (ret)
262 return ret; 258 return ret;
@@ -274,7 +270,7 @@ static ssize_t set_type(struct device *dev, struct device_attribute *attr,
274 else 270 else
275 data->sensor_type &= ~mask; 271 data->sensor_type &= ~mask;
276 data->valid = false; 272 data->valid = false;
277 i2c_smbus_write_byte_data(client, LM95234_REG_REM_MODEL, 273 i2c_smbus_write_byte_data(data->client, LM95234_REG_REM_MODEL,
278 data->sensor_type); 274 data->sensor_type);
279 mutex_unlock(&data->update_lock); 275 mutex_unlock(&data->update_lock);
280 276
@@ -284,10 +280,9 @@ static ssize_t set_type(struct device *dev, struct device_attribute *attr,
284static ssize_t show_tcrit2(struct device *dev, struct device_attribute *attr, 280static ssize_t show_tcrit2(struct device *dev, struct device_attribute *attr,
285 char *buf) 281 char *buf)
286{ 282{
287 struct i2c_client *client = to_i2c_client(dev); 283 struct lm95234_data *data = dev_get_drvdata(dev);
288 struct lm95234_data *data = i2c_get_clientdata(client);
289 int index = to_sensor_dev_attr(attr)->index; 284 int index = to_sensor_dev_attr(attr)->index;
290 int ret = lm95234_update_device(client, data); 285 int ret = lm95234_update_device(data);
291 286
292 if (ret) 287 if (ret)
293 return ret; 288 return ret;
@@ -298,11 +293,10 @@ static ssize_t show_tcrit2(struct device *dev, struct device_attribute *attr,
298static ssize_t set_tcrit2(struct device *dev, struct device_attribute *attr, 293static ssize_t set_tcrit2(struct device *dev, struct device_attribute *attr,
299 const char *buf, size_t count) 294 const char *buf, size_t count)
300{ 295{
301 struct i2c_client *client = to_i2c_client(dev); 296 struct lm95234_data *data = dev_get_drvdata(dev);
302 struct lm95234_data *data = i2c_get_clientdata(client);
303 int index = to_sensor_dev_attr(attr)->index; 297 int index = to_sensor_dev_attr(attr)->index;
304 long val; 298 long val;
305 int ret = lm95234_update_device(client, data); 299 int ret = lm95234_update_device(data);
306 300
307 if (ret) 301 if (ret)
308 return ret; 302 return ret;
@@ -315,7 +309,7 @@ static ssize_t set_tcrit2(struct device *dev, struct device_attribute *attr,
315 309
316 mutex_lock(&data->update_lock); 310 mutex_lock(&data->update_lock);
317 data->tcrit2[index] = val; 311 data->tcrit2[index] = val;
318 i2c_smbus_write_byte_data(client, LM95234_REG_TCRIT2(index), val); 312 i2c_smbus_write_byte_data(data->client, LM95234_REG_TCRIT2(index), val);
319 mutex_unlock(&data->update_lock); 313 mutex_unlock(&data->update_lock);
320 314
321 return count; 315 return count;
@@ -324,10 +318,9 @@ static ssize_t set_tcrit2(struct device *dev, struct device_attribute *attr,
324static ssize_t show_tcrit2_hyst(struct device *dev, 318static ssize_t show_tcrit2_hyst(struct device *dev,
325 struct device_attribute *attr, char *buf) 319 struct device_attribute *attr, char *buf)
326{ 320{
327 struct i2c_client *client = to_i2c_client(dev); 321 struct lm95234_data *data = dev_get_drvdata(dev);
328 struct lm95234_data *data = i2c_get_clientdata(client);
329 int index = to_sensor_dev_attr(attr)->index; 322 int index = to_sensor_dev_attr(attr)->index;
330 int ret = lm95234_update_device(client, data); 323 int ret = lm95234_update_device(data);
331 324
332 if (ret) 325 if (ret)
333 return ret; 326 return ret;
@@ -340,8 +333,7 @@ static ssize_t show_tcrit2_hyst(struct device *dev,
340static ssize_t show_tcrit1(struct device *dev, struct device_attribute *attr, 333static ssize_t show_tcrit1(struct device *dev, struct device_attribute *attr,
341 char *buf) 334 char *buf)
342{ 335{
343 struct i2c_client *client = to_i2c_client(dev); 336 struct lm95234_data *data = dev_get_drvdata(dev);
344 struct lm95234_data *data = i2c_get_clientdata(client);
345 int index = to_sensor_dev_attr(attr)->index; 337 int index = to_sensor_dev_attr(attr)->index;
346 338
347 return sprintf(buf, "%u", data->tcrit1[index] * 1000); 339 return sprintf(buf, "%u", data->tcrit1[index] * 1000);
@@ -350,11 +342,10 @@ static ssize_t show_tcrit1(struct device *dev, struct device_attribute *attr,
350static ssize_t set_tcrit1(struct device *dev, struct device_attribute *attr, 342static ssize_t set_tcrit1(struct device *dev, struct device_attribute *attr,
351 const char *buf, size_t count) 343 const char *buf, size_t count)
352{ 344{
353 struct i2c_client *client = to_i2c_client(dev); 345 struct lm95234_data *data = dev_get_drvdata(dev);
354 struct lm95234_data *data = i2c_get_clientdata(client);
355 int index = to_sensor_dev_attr(attr)->index; 346 int index = to_sensor_dev_attr(attr)->index;
347 int ret = lm95234_update_device(data);
356 long val; 348 long val;
357 int ret = lm95234_update_device(client, data);
358 349
359 if (ret) 350 if (ret)
360 return ret; 351 return ret;
@@ -367,7 +358,7 @@ static ssize_t set_tcrit1(struct device *dev, struct device_attribute *attr,
367 358
368 mutex_lock(&data->update_lock); 359 mutex_lock(&data->update_lock);
369 data->tcrit1[index] = val; 360 data->tcrit1[index] = val;
370 i2c_smbus_write_byte_data(client, LM95234_REG_TCRIT1(index), val); 361 i2c_smbus_write_byte_data(data->client, LM95234_REG_TCRIT1(index), val);
371 mutex_unlock(&data->update_lock); 362 mutex_unlock(&data->update_lock);
372 363
373 return count; 364 return count;
@@ -376,10 +367,9 @@ static ssize_t set_tcrit1(struct device *dev, struct device_attribute *attr,
376static ssize_t show_tcrit1_hyst(struct device *dev, 367static ssize_t show_tcrit1_hyst(struct device *dev,
377 struct device_attribute *attr, char *buf) 368 struct device_attribute *attr, char *buf)
378{ 369{
379 struct i2c_client *client = to_i2c_client(dev); 370 struct lm95234_data *data = dev_get_drvdata(dev);
380 struct lm95234_data *data = i2c_get_clientdata(client);
381 int index = to_sensor_dev_attr(attr)->index; 371 int index = to_sensor_dev_attr(attr)->index;
382 int ret = lm95234_update_device(client, data); 372 int ret = lm95234_update_device(data);
383 373
384 if (ret) 374 if (ret)
385 return ret; 375 return ret;
@@ -393,11 +383,10 @@ static ssize_t set_tcrit1_hyst(struct device *dev,
393 struct device_attribute *attr, 383 struct device_attribute *attr,
394 const char *buf, size_t count) 384 const char *buf, size_t count)
395{ 385{
396 struct i2c_client *client = to_i2c_client(dev); 386 struct lm95234_data *data = dev_get_drvdata(dev);
397 struct lm95234_data *data = i2c_get_clientdata(client);
398 int index = to_sensor_dev_attr(attr)->index; 387 int index = to_sensor_dev_attr(attr)->index;
388 int ret = lm95234_update_device(data);
399 long val; 389 long val;
400 int ret = lm95234_update_device(client, data);
401 390
402 if (ret) 391 if (ret)
403 return ret; 392 return ret;
@@ -411,7 +400,7 @@ static ssize_t set_tcrit1_hyst(struct device *dev,
411 400
412 mutex_lock(&data->update_lock); 401 mutex_lock(&data->update_lock);
413 data->thyst = val; 402 data->thyst = val;
414 i2c_smbus_write_byte_data(client, LM95234_REG_TCRIT_HYST, val); 403 i2c_smbus_write_byte_data(data->client, LM95234_REG_TCRIT_HYST, val);
415 mutex_unlock(&data->update_lock); 404 mutex_unlock(&data->update_lock);
416 405
417 return count; 406 return count;
@@ -420,10 +409,9 @@ static ssize_t set_tcrit1_hyst(struct device *dev,
420static ssize_t show_offset(struct device *dev, struct device_attribute *attr, 409static ssize_t show_offset(struct device *dev, struct device_attribute *attr,
421 char *buf) 410 char *buf)
422{ 411{
423 struct i2c_client *client = to_i2c_client(dev); 412 struct lm95234_data *data = dev_get_drvdata(dev);
424 struct lm95234_data *data = i2c_get_clientdata(client);
425 int index = to_sensor_dev_attr(attr)->index; 413 int index = to_sensor_dev_attr(attr)->index;
426 int ret = lm95234_update_device(client, data); 414 int ret = lm95234_update_device(data);
427 415
428 if (ret) 416 if (ret)
429 return ret; 417 return ret;
@@ -434,11 +422,10 @@ static ssize_t show_offset(struct device *dev, struct device_attribute *attr,
434static ssize_t set_offset(struct device *dev, struct device_attribute *attr, 422static ssize_t set_offset(struct device *dev, struct device_attribute *attr,
435 const char *buf, size_t count) 423 const char *buf, size_t count)
436{ 424{
437 struct i2c_client *client = to_i2c_client(dev); 425 struct lm95234_data *data = dev_get_drvdata(dev);
438 struct lm95234_data *data = i2c_get_clientdata(client);
439 int index = to_sensor_dev_attr(attr)->index; 426 int index = to_sensor_dev_attr(attr)->index;
427 int ret = lm95234_update_device(data);
440 long val; 428 long val;
441 int ret = lm95234_update_device(client, data);
442 429
443 if (ret) 430 if (ret)
444 return ret; 431 return ret;
@@ -452,7 +439,7 @@ static ssize_t set_offset(struct device *dev, struct device_attribute *attr,
452 439
453 mutex_lock(&data->update_lock); 440 mutex_lock(&data->update_lock);
454 data->toffset[index] = val; 441 data->toffset[index] = val;
455 i2c_smbus_write_byte_data(client, LM95234_REG_OFFSET(index), val); 442 i2c_smbus_write_byte_data(data->client, LM95234_REG_OFFSET(index), val);
456 mutex_unlock(&data->update_lock); 443 mutex_unlock(&data->update_lock);
457 444
458 return count; 445 return count;
@@ -461,9 +448,8 @@ static ssize_t set_offset(struct device *dev, struct device_attribute *attr,
461static ssize_t show_interval(struct device *dev, struct device_attribute *attr, 448static ssize_t show_interval(struct device *dev, struct device_attribute *attr,
462 char *buf) 449 char *buf)
463{ 450{
464 struct i2c_client *client = to_i2c_client(dev); 451 struct lm95234_data *data = dev_get_drvdata(dev);
465 struct lm95234_data *data = i2c_get_clientdata(client); 452 int ret = lm95234_update_device(data);
466 int ret = lm95234_update_device(client, data);
467 453
468 if (ret) 454 if (ret)
469 return ret; 455 return ret;
@@ -475,11 +461,10 @@ static ssize_t show_interval(struct device *dev, struct device_attribute *attr,
475static ssize_t set_interval(struct device *dev, struct device_attribute *attr, 461static ssize_t set_interval(struct device *dev, struct device_attribute *attr,
476 const char *buf, size_t count) 462 const char *buf, size_t count)
477{ 463{
478 struct i2c_client *client = to_i2c_client(dev); 464 struct lm95234_data *data = dev_get_drvdata(dev);
479 struct lm95234_data *data = i2c_get_clientdata(client); 465 int ret = lm95234_update_device(data);
480 unsigned long val; 466 unsigned long val;
481 u8 regval; 467 u8 regval;
482 int ret = lm95234_update_device(client, data);
483 468
484 if (ret) 469 if (ret)
485 return ret; 470 return ret;
@@ -495,7 +480,7 @@ static ssize_t set_interval(struct device *dev, struct device_attribute *attr,
495 480
496 mutex_lock(&data->update_lock); 481 mutex_lock(&data->update_lock);
497 data->interval = msecs_to_jiffies(update_intervals[regval]); 482 data->interval = msecs_to_jiffies(update_intervals[regval]);
498 i2c_smbus_write_byte_data(client, LM95234_REG_CONVRATE, regval); 483 i2c_smbus_write_byte_data(data->client, LM95234_REG_CONVRATE, regval);
499 mutex_unlock(&data->update_lock); 484 mutex_unlock(&data->update_lock);
500 485
501 return count; 486 return count;
@@ -579,7 +564,7 @@ static SENSOR_DEVICE_ATTR(temp5_offset, S_IWUSR | S_IRUGO, show_offset,
579static DEVICE_ATTR(update_interval, S_IWUSR | S_IRUGO, show_interval, 564static DEVICE_ATTR(update_interval, S_IWUSR | S_IRUGO, show_interval,
580 set_interval); 565 set_interval);
581 566
582static struct attribute *lm95234_attributes[] = { 567static struct attribute *lm95234_attrs[] = {
583 &sensor_dev_attr_temp1_input.dev_attr.attr, 568 &sensor_dev_attr_temp1_input.dev_attr.attr,
584 &sensor_dev_attr_temp2_input.dev_attr.attr, 569 &sensor_dev_attr_temp2_input.dev_attr.attr,
585 &sensor_dev_attr_temp3_input.dev_attr.attr, 570 &sensor_dev_attr_temp3_input.dev_attr.attr,
@@ -621,10 +606,7 @@ static struct attribute *lm95234_attributes[] = {
621 &dev_attr_update_interval.attr, 606 &dev_attr_update_interval.attr,
622 NULL 607 NULL
623}; 608};
624 609ATTRIBUTE_GROUPS(lm95234);
625static const struct attribute_group lm95234_group = {
626 .attrs = lm95234_attributes,
627};
628 610
629static int lm95234_detect(struct i2c_client *client, 611static int lm95234_detect(struct i2c_client *client,
630 struct i2c_board_info *info) 612 struct i2c_board_info *info)
@@ -701,13 +683,14 @@ static int lm95234_probe(struct i2c_client *client,
701{ 683{
702 struct device *dev = &client->dev; 684 struct device *dev = &client->dev;
703 struct lm95234_data *data; 685 struct lm95234_data *data;
686 struct device *hwmon_dev;
704 int err; 687 int err;
705 688
706 data = devm_kzalloc(dev, sizeof(struct lm95234_data), GFP_KERNEL); 689 data = devm_kzalloc(dev, sizeof(struct lm95234_data), GFP_KERNEL);
707 if (!data) 690 if (!data)
708 return -ENOMEM; 691 return -ENOMEM;
709 692
710 i2c_set_clientdata(client, data); 693 data->client = client;
711 mutex_init(&data->update_lock); 694 mutex_init(&data->update_lock);
712 695
713 /* Initialize the LM95234 chip */ 696 /* Initialize the LM95234 chip */
@@ -715,30 +698,11 @@ static int lm95234_probe(struct i2c_client *client,
715 if (err < 0) 698 if (err < 0)
716 return err; 699 return err;
717 700
718 /* Register sysfs hooks */ 701 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
719 err = sysfs_create_group(&dev->kobj, &lm95234_group); 702 data,
720 if (err) 703 lm95234_groups);
721 return err; 704 if (IS_ERR(hwmon_dev))
722 705 return PTR_ERR(hwmon_dev);
723 data->hwmon_dev = hwmon_device_register(dev);
724 if (IS_ERR(data->hwmon_dev)) {
725 err = PTR_ERR(data->hwmon_dev);
726 goto exit_remove_files;
727 }
728
729 return 0;
730
731exit_remove_files:
732 sysfs_remove_group(&dev->kobj, &lm95234_group);
733 return err;
734}
735
736static int lm95234_remove(struct i2c_client *client)
737{
738 struct lm95234_data *data = i2c_get_clientdata(client);
739
740 hwmon_device_unregister(data->hwmon_dev);
741 sysfs_remove_group(&client->dev.kobj, &lm95234_group);
742 706
743 return 0; 707 return 0;
744} 708}
@@ -756,7 +720,6 @@ static struct i2c_driver lm95234_driver = {
756 .name = DRVNAME, 720 .name = DRVNAME,
757 }, 721 },
758 .probe = lm95234_probe, 722 .probe = lm95234_probe,
759 .remove = lm95234_remove,
760 .id_table = lm95234_id, 723 .id_table = lm95234_id,
761 .detect = lm95234_detect, 724 .detect = lm95234_detect,
762 .address_list = normal_i2c, 725 .address_list = normal_i2c,