aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAxel Lin <axel.lin@ingics.com>2014-07-02 08:26:32 -0400
committerGuenter Roeck <linux@roeck-us.net>2014-08-04 10:01:37 -0400
commit781126a0c8debc713a07da16c790253dadb33184 (patch)
tree92f6f84e4ab495a6afcafea5d0a83472dc30c596
parent4341fc3f32b278d136179772338ccaa31f222c99 (diff)
hwmon: (smm665) 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>
-rw-r--r--drivers/hwmon/smm665.c44
1 files changed, 16 insertions, 28 deletions
diff --git a/drivers/hwmon/smm665.c b/drivers/hwmon/smm665.c
index 4ef5802df6d8..627c9c3a8255 100644
--- a/drivers/hwmon/smm665.c
+++ b/drivers/hwmon/smm665.c
@@ -140,7 +140,7 @@ enum chips { smm465, smm665, smm665c, smm764, smm766 };
140struct smm665_data { 140struct smm665_data {
141 enum chips type; 141 enum chips type;
142 int conversion_time; /* ADC conversion time */ 142 int conversion_time; /* ADC conversion time */
143 struct device *hwmon_dev; 143 struct i2c_client *client;
144 struct mutex update_lock; 144 struct mutex update_lock;
145 bool valid; 145 bool valid;
146 unsigned long last_updated; /* in jiffies */ 146 unsigned long last_updated; /* in jiffies */
@@ -239,8 +239,8 @@ static int smm665_read_adc(struct smm665_data *data, int adc)
239 239
240static struct smm665_data *smm665_update_device(struct device *dev) 240static struct smm665_data *smm665_update_device(struct device *dev)
241{ 241{
242 struct i2c_client *client = to_i2c_client(dev); 242 struct smm665_data *data = dev_get_drvdata(dev);
243 struct smm665_data *data = i2c_get_clientdata(client); 243 struct i2c_client *client = data->client;
244 struct smm665_data *ret = data; 244 struct smm665_data *ret = data;
245 245
246 mutex_lock(&data->update_lock); 246 mutex_lock(&data->update_lock);
@@ -315,32 +315,28 @@ static int smm665_convert(u16 adcval, int index)
315 315
316static int smm665_get_min(struct device *dev, int index) 316static int smm665_get_min(struct device *dev, int index)
317{ 317{
318 struct i2c_client *client = to_i2c_client(dev); 318 struct smm665_data *data = dev_get_drvdata(dev);
319 struct smm665_data *data = i2c_get_clientdata(client);
320 319
321 return data->alarm_min_limit[index]; 320 return data->alarm_min_limit[index];
322} 321}
323 322
324static int smm665_get_max(struct device *dev, int index) 323static int smm665_get_max(struct device *dev, int index)
325{ 324{
326 struct i2c_client *client = to_i2c_client(dev); 325 struct smm665_data *data = dev_get_drvdata(dev);
327 struct smm665_data *data = i2c_get_clientdata(client);
328 326
329 return data->alarm_max_limit[index]; 327 return data->alarm_max_limit[index];
330} 328}
331 329
332static int smm665_get_lcrit(struct device *dev, int index) 330static int smm665_get_lcrit(struct device *dev, int index)
333{ 331{
334 struct i2c_client *client = to_i2c_client(dev); 332 struct smm665_data *data = dev_get_drvdata(dev);
335 struct smm665_data *data = i2c_get_clientdata(client);
336 333
337 return data->critical_min_limit[index]; 334 return data->critical_min_limit[index];
338} 335}
339 336
340static int smm665_get_crit(struct device *dev, int index) 337static int smm665_get_crit(struct device *dev, int index)
341{ 338{
342 struct i2c_client *client = to_i2c_client(dev); 339 struct smm665_data *data = dev_get_drvdata(dev);
343 struct smm665_data *data = i2c_get_clientdata(client);
344 340
345 return data->critical_max_limit[index]; 341 return data->critical_max_limit[index];
346} 342}
@@ -486,7 +482,7 @@ SMM665_ATTR(temp1, crit_alarm, SMM665_FAULT_TEMP);
486 * Finally, construct an array of pointers to members of the above objects, 482 * Finally, construct an array of pointers to members of the above objects,
487 * as required for sysfs_create_group() 483 * as required for sysfs_create_group()
488 */ 484 */
489static struct attribute *smm665_attributes[] = { 485static struct attribute *smm665_attrs[] = {
490 &sensor_dev_attr_in1_input.dev_attr.attr, 486 &sensor_dev_attr_in1_input.dev_attr.attr,
491 &sensor_dev_attr_in1_min.dev_attr.attr, 487 &sensor_dev_attr_in1_min.dev_attr.attr,
492 &sensor_dev_attr_in1_max.dev_attr.attr, 488 &sensor_dev_attr_in1_max.dev_attr.attr,
@@ -567,15 +563,14 @@ static struct attribute *smm665_attributes[] = {
567 NULL, 563 NULL,
568}; 564};
569 565
570static const struct attribute_group smm665_group = { 566ATTRIBUTE_GROUPS(smm665);
571 .attrs = smm665_attributes,
572};
573 567
574static int smm665_probe(struct i2c_client *client, 568static int smm665_probe(struct i2c_client *client,
575 const struct i2c_device_id *id) 569 const struct i2c_device_id *id)
576{ 570{
577 struct i2c_adapter *adapter = client->adapter; 571 struct i2c_adapter *adapter = client->adapter;
578 struct smm665_data *data; 572 struct smm665_data *data;
573 struct device *hwmon_dev;
579 int i, ret; 574 int i, ret;
580 575
581 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA 576 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA
@@ -592,6 +587,7 @@ static int smm665_probe(struct i2c_client *client,
592 i2c_set_clientdata(client, data); 587 i2c_set_clientdata(client, data);
593 mutex_init(&data->update_lock); 588 mutex_init(&data->update_lock);
594 589
590 data->client = client;
595 data->type = id->driver_data; 591 data->type = id->driver_data;
596 data->cmdreg = i2c_new_dummy(adapter, (client->addr & ~SMM665_REGMASK) 592 data->cmdreg = i2c_new_dummy(adapter, (client->addr & ~SMM665_REGMASK)
597 | SMM665_CMDREG_BASE); 593 | SMM665_CMDREG_BASE);
@@ -662,21 +658,16 @@ static int smm665_probe(struct i2c_client *client,
662 data->alarm_max_limit[i] = smm665_convert(val, i); 658 data->alarm_max_limit[i] = smm665_convert(val, i);
663 } 659 }
664 660
665 /* Register sysfs hooks */ 661 hwmon_dev = devm_hwmon_device_register_with_groups(&client->dev,
666 ret = sysfs_create_group(&client->dev.kobj, &smm665_group); 662 client->name, data,
667 if (ret) 663 smm665_groups);
664 if (IS_ERR(hwmon_dev)) {
665 ret = PTR_ERR(hwmon_dev);
668 goto out_unregister; 666 goto out_unregister;
669
670 data->hwmon_dev = hwmon_device_register(&client->dev);
671 if (IS_ERR(data->hwmon_dev)) {
672 ret = PTR_ERR(data->hwmon_dev);
673 goto out_remove_group;
674 } 667 }
675 668
676 return 0; 669 return 0;
677 670
678out_remove_group:
679 sysfs_remove_group(&client->dev.kobj, &smm665_group);
680out_unregister: 671out_unregister:
681 i2c_unregister_device(data->cmdreg); 672 i2c_unregister_device(data->cmdreg);
682 return ret; 673 return ret;
@@ -687,9 +678,6 @@ static int smm665_remove(struct i2c_client *client)
687 struct smm665_data *data = i2c_get_clientdata(client); 678 struct smm665_data *data = i2c_get_clientdata(client);
688 679
689 i2c_unregister_device(data->cmdreg); 680 i2c_unregister_device(data->cmdreg);
690 hwmon_device_unregister(data->hwmon_dev);
691 sysfs_remove_group(&client->dev.kobj, &smm665_group);
692
693 return 0; 681 return 0;
694} 682}
695 683