diff options
author | Axel Lin <axel.lin@ingics.com> | 2014-07-02 08:26:32 -0400 |
---|---|---|
committer | Guenter Roeck <linux@roeck-us.net> | 2014-08-04 10:01:37 -0400 |
commit | 781126a0c8debc713a07da16c790253dadb33184 (patch) | |
tree | 92f6f84e4ab495a6afcafea5d0a83472dc30c596 | |
parent | 4341fc3f32b278d136179772338ccaa31f222c99 (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.c | 44 |
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 }; | |||
140 | struct smm665_data { | 140 | struct 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 | ||
240 | static struct smm665_data *smm665_update_device(struct device *dev) | 240 | static 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 | ||
316 | static int smm665_get_min(struct device *dev, int index) | 316 | static 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 | ||
324 | static int smm665_get_max(struct device *dev, int index) | 323 | static 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 | ||
332 | static int smm665_get_lcrit(struct device *dev, int index) | 330 | static 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 | ||
340 | static int smm665_get_crit(struct device *dev, int index) | 337 | static 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 | */ |
489 | static struct attribute *smm665_attributes[] = { | 485 | static 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 | ||
570 | static const struct attribute_group smm665_group = { | 566 | ATTRIBUTE_GROUPS(smm665); |
571 | .attrs = smm665_attributes, | ||
572 | }; | ||
573 | 567 | ||
574 | static int smm665_probe(struct i2c_client *client, | 568 | static 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 | ||
678 | out_remove_group: | ||
679 | sysfs_remove_group(&client->dev.kobj, &smm665_group); | ||
680 | out_unregister: | 671 | out_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 | ||