aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon/smsc47m192.c
diff options
context:
space:
mode:
authorAxel Lin <axel.lin@ingics.com>2014-07-17 07:21:44 -0400
committerGuenter Roeck <linux@roeck-us.net>2014-08-04 10:01:39 -0400
commit166f72966d69334a68774abb7eaa73eece54d464 (patch)
treeab668a745540adcd12ec6167848a8a7e9f88ca33 /drivers/hwmon/smsc47m192.c
parent94314e259333892e7b085cd343720bbdc2fa67c5 (diff)
hwmon: (smsc47m192) Convert to devm_hwmon_device_register_with_groups
Use 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>
Diffstat (limited to 'drivers/hwmon/smsc47m192.c')
-rw-r--r--drivers/hwmon/smsc47m192.c77
1 files changed, 25 insertions, 52 deletions
diff --git a/drivers/hwmon/smsc47m192.c b/drivers/hwmon/smsc47m192.c
index fcada5db86fc..6ac7cda72d4c 100644
--- a/drivers/hwmon/smsc47m192.c
+++ b/drivers/hwmon/smsc47m192.c
@@ -95,7 +95,8 @@ static inline int TEMP_FROM_REG(s8 val)
95} 95}
96 96
97struct smsc47m192_data { 97struct smsc47m192_data {
98 struct device *hwmon_dev; 98 struct i2c_client *client;
99 const struct attribute_group *groups[3];
99 struct mutex update_lock; 100 struct mutex update_lock;
100 char valid; /* !=0 if following fields are valid */ 101 char valid; /* !=0 if following fields are valid */
101 unsigned long last_updated; /* In jiffies */ 102 unsigned long last_updated; /* In jiffies */
@@ -114,8 +115,8 @@ struct smsc47m192_data {
114 115
115static struct smsc47m192_data *smsc47m192_update_device(struct device *dev) 116static struct smsc47m192_data *smsc47m192_update_device(struct device *dev)
116{ 117{
117 struct i2c_client *client = to_i2c_client(dev); 118 struct smsc47m192_data *data = dev_get_drvdata(dev);
118 struct smsc47m192_data *data = i2c_get_clientdata(client); 119 struct i2c_client *client = data->client;
119 int i, config; 120 int i, config;
120 121
121 mutex_lock(&data->update_lock); 122 mutex_lock(&data->update_lock);
@@ -209,8 +210,8 @@ static ssize_t set_in_min(struct device *dev, struct device_attribute *attr,
209{ 210{
210 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 211 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
211 int nr = sensor_attr->index; 212 int nr = sensor_attr->index;
212 struct i2c_client *client = to_i2c_client(dev); 213 struct smsc47m192_data *data = dev_get_drvdata(dev);
213 struct smsc47m192_data *data = i2c_get_clientdata(client); 214 struct i2c_client *client = data->client;
214 unsigned long val; 215 unsigned long val;
215 int err; 216 int err;
216 217
@@ -231,8 +232,8 @@ static ssize_t set_in_max(struct device *dev, struct device_attribute *attr,
231{ 232{
232 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 233 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
233 int nr = sensor_attr->index; 234 int nr = sensor_attr->index;
234 struct i2c_client *client = to_i2c_client(dev); 235 struct smsc47m192_data *data = dev_get_drvdata(dev);
235 struct smsc47m192_data *data = i2c_get_clientdata(client); 236 struct i2c_client *client = data->client;
236 unsigned long val; 237 unsigned long val;
237 int err; 238 int err;
238 239
@@ -298,8 +299,8 @@ static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,
298{ 299{
299 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 300 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
300 int nr = sensor_attr->index; 301 int nr = sensor_attr->index;
301 struct i2c_client *client = to_i2c_client(dev); 302 struct smsc47m192_data *data = dev_get_drvdata(dev);
302 struct smsc47m192_data *data = i2c_get_clientdata(client); 303 struct i2c_client *client = data->client;
303 long val; 304 long val;
304 int err; 305 int err;
305 306
@@ -320,8 +321,8 @@ static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
320{ 321{
321 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 322 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
322 int nr = sensor_attr->index; 323 int nr = sensor_attr->index;
323 struct i2c_client *client = to_i2c_client(dev); 324 struct smsc47m192_data *data = dev_get_drvdata(dev);
324 struct smsc47m192_data *data = i2c_get_clientdata(client); 325 struct i2c_client *client = data->client;
325 long val; 326 long val;
326 int err; 327 int err;
327 328
@@ -351,8 +352,8 @@ static ssize_t set_temp_offset(struct device *dev, struct device_attribute
351{ 352{
352 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 353 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
353 int nr = sensor_attr->index; 354 int nr = sensor_attr->index;
354 struct i2c_client *client = to_i2c_client(dev); 355 struct smsc47m192_data *data = dev_get_drvdata(dev);
355 struct smsc47m192_data *data = i2c_get_clientdata(client); 356 struct i2c_client *client = data->client;
356 u8 sfr = i2c_smbus_read_byte_data(client, SMSC47M192_REG_SFR); 357 u8 sfr = i2c_smbus_read_byte_data(client, SMSC47M192_REG_SFR);
357 long val; 358 long val;
358 int err; 359 int err;
@@ -591,59 +592,32 @@ static int smsc47m192_detect(struct i2c_client *client,
591static int smsc47m192_probe(struct i2c_client *client, 592static int smsc47m192_probe(struct i2c_client *client,
592 const struct i2c_device_id *id) 593 const struct i2c_device_id *id)
593{ 594{
595 struct device *dev = &client->dev;
596 struct device *hwmon_dev;
594 struct smsc47m192_data *data; 597 struct smsc47m192_data *data;
595 int config; 598 int config;
596 int err;
597 599
598 data = devm_kzalloc(&client->dev, sizeof(struct smsc47m192_data), 600 data = devm_kzalloc(dev, sizeof(struct smsc47m192_data), GFP_KERNEL);
599 GFP_KERNEL);
600 if (!data) 601 if (!data)
601 return -ENOMEM; 602 return -ENOMEM;
602 603
603 i2c_set_clientdata(client, data); 604 data->client = client;
604 data->vrm = vid_which_vrm(); 605 data->vrm = vid_which_vrm();
605 mutex_init(&data->update_lock); 606 mutex_init(&data->update_lock);
606 607
607 /* Initialize the SMSC47M192 chip */ 608 /* Initialize the SMSC47M192 chip */
608 smsc47m192_init_client(client); 609 smsc47m192_init_client(client);
609 610
610 /* Register sysfs hooks */ 611 /* sysfs hooks */
611 err = sysfs_create_group(&client->dev.kobj, &smsc47m192_group); 612 data->groups[0] = &smsc47m192_group;
612 if (err)
613 return err;
614
615 /* Pin 110 is either in4 (+12V) or VID4 */ 613 /* Pin 110 is either in4 (+12V) or VID4 */
616 config = i2c_smbus_read_byte_data(client, SMSC47M192_REG_CONFIG); 614 config = i2c_smbus_read_byte_data(client, SMSC47M192_REG_CONFIG);
617 if (!(config & 0x20)) { 615 if (!(config & 0x20))
618 err = sysfs_create_group(&client->dev.kobj, 616 data->groups[1] = &smsc47m192_group_in4;
619 &smsc47m192_group_in4);
620 if (err)
621 goto exit_remove_files;
622 }
623
624 data->hwmon_dev = hwmon_device_register(&client->dev);
625 if (IS_ERR(data->hwmon_dev)) {
626 err = PTR_ERR(data->hwmon_dev);
627 goto exit_remove_files;
628 }
629 617
630 return 0; 618 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
631 619 data, data->groups);
632exit_remove_files: 620 return PTR_ERR_OR_ZERO(hwmon_dev);
633 sysfs_remove_group(&client->dev.kobj, &smsc47m192_group);
634 sysfs_remove_group(&client->dev.kobj, &smsc47m192_group_in4);
635 return err;
636}
637
638static int smsc47m192_remove(struct i2c_client *client)
639{
640 struct smsc47m192_data *data = i2c_get_clientdata(client);
641
642 hwmon_device_unregister(data->hwmon_dev);
643 sysfs_remove_group(&client->dev.kobj, &smsc47m192_group);
644 sysfs_remove_group(&client->dev.kobj, &smsc47m192_group_in4);
645
646 return 0;
647} 621}
648 622
649static const struct i2c_device_id smsc47m192_id[] = { 623static const struct i2c_device_id smsc47m192_id[] = {
@@ -658,7 +632,6 @@ static struct i2c_driver smsc47m192_driver = {
658 .name = "smsc47m192", 632 .name = "smsc47m192",
659 }, 633 },
660 .probe = smsc47m192_probe, 634 .probe = smsc47m192_probe,
661 .remove = smsc47m192_remove,
662 .id_table = smsc47m192_id, 635 .id_table = smsc47m192_id,
663 .detect = smsc47m192_detect, 636 .detect = smsc47m192_detect,
664 .address_list = normal_i2c, 637 .address_list = normal_i2c,