aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon
diff options
context:
space:
mode:
authorGuenter Roeck <linux@roeck-us.net>2014-04-04 12:01:35 -0400
committerJean Delvare <jdelvare@suse.de>2014-04-04 12:01:35 -0400
commit084489e64cad50b2a3927abafc69b6fd72eb56bc (patch)
tree73f9479ea4cfe6408d56c13cb8af652ae4439337 /drivers/hwmon
parentd89fa6867d39ccf589799da50b1e1ee1c0713c4d (diff)
hwmon: (lm90) Create all sysfs groups in one call
Create all sysfs groups in one call by using sysfs_create_groups instead of calling sysfs_create_group individually for each group. Signed-off-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Jean Delvare <jdelvare@suse.de>
Diffstat (limited to 'drivers/hwmon')
-rw-r--r--drivers/hwmon/lm90.c69
1 files changed, 26 insertions, 43 deletions
diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
index 07ffd1061e35..9ad7401f3b2c 100644
--- a/drivers/hwmon/lm90.c
+++ b/drivers/hwmon/lm90.c
@@ -366,6 +366,7 @@ enum lm90_temp11_reg_index {
366 366
367struct lm90_data { 367struct lm90_data {
368 struct device *hwmon_dev; 368 struct device *hwmon_dev;
369 const struct attribute_group *groups[6];
369 struct mutex update_lock; 370 struct mutex update_lock;
370 struct regulator *regulator; 371 struct regulator *regulator;
371 char valid; /* zero until following fields are valid */ 372 char valid; /* zero until following fields are valid */
@@ -1402,22 +1403,6 @@ static int lm90_detect(struct i2c_client *client,
1402 return 0; 1403 return 0;
1403} 1404}
1404 1405
1405static void lm90_remove_files(struct i2c_client *client, struct lm90_data *data)
1406{
1407 struct device *dev = &client->dev;
1408
1409 if (data->flags & LM90_HAVE_TEMP3)
1410 sysfs_remove_group(&dev->kobj, &lm90_temp3_group);
1411 if (data->flags & LM90_HAVE_EMERGENCY_ALARM)
1412 sysfs_remove_group(&dev->kobj, &lm90_emergency_alarm_group);
1413 if (data->flags & LM90_HAVE_EMERGENCY)
1414 sysfs_remove_group(&dev->kobj, &lm90_emergency_group);
1415 if (data->flags & LM90_HAVE_OFFSET)
1416 sysfs_remove_group(&dev->kobj, &lm90_temp2_offset_group);
1417 device_remove_file(dev, &dev_attr_pec);
1418 sysfs_remove_group(&dev->kobj, &lm90_group);
1419}
1420
1421static void lm90_restore_conf(struct i2c_client *client, struct lm90_data *data) 1406static void lm90_restore_conf(struct i2c_client *client, struct lm90_data *data)
1422{ 1407{
1423 /* Restore initial configuration */ 1408 /* Restore initial configuration */
@@ -1528,6 +1513,7 @@ static int lm90_probe(struct i2c_client *client,
1528 struct i2c_adapter *adapter = to_i2c_adapter(dev->parent); 1513 struct i2c_adapter *adapter = to_i2c_adapter(dev->parent);
1529 struct lm90_data *data; 1514 struct lm90_data *data;
1530 struct regulator *regulator; 1515 struct regulator *regulator;
1516 int groups = 0;
1531 int err; 1517 int err;
1532 1518
1533 regulator = devm_regulator_get(dev, "vcc"); 1519 regulator = devm_regulator_get(dev, "vcc");
@@ -1573,36 +1559,30 @@ static int lm90_probe(struct i2c_client *client,
1573 lm90_init_client(client); 1559 lm90_init_client(client);
1574 1560
1575 /* Register sysfs hooks */ 1561 /* Register sysfs hooks */
1576 err = sysfs_create_group(&dev->kobj, &lm90_group); 1562 data->groups[groups++] = &lm90_group;
1577 if (err) 1563
1578 goto exit_restore; 1564 if (data->flags & LM90_HAVE_OFFSET)
1565 data->groups[groups++] = &lm90_temp2_offset_group;
1566
1567 if (data->flags & LM90_HAVE_EMERGENCY)
1568 data->groups[groups++] = &lm90_emergency_group;
1569
1570 if (data->flags & LM90_HAVE_EMERGENCY_ALARM)
1571 data->groups[groups++] = &lm90_emergency_alarm_group;
1572
1573 if (data->flags & LM90_HAVE_TEMP3)
1574 data->groups[groups++] = &lm90_temp3_group;
1575
1579 if (client->flags & I2C_CLIENT_PEC) { 1576 if (client->flags & I2C_CLIENT_PEC) {
1580 err = device_create_file(dev, &dev_attr_pec); 1577 err = device_create_file(dev, &dev_attr_pec);
1581 if (err) 1578 if (err)
1582 goto exit_remove_files; 1579 goto exit_restore;
1583 }
1584 if (data->flags & LM90_HAVE_OFFSET) {
1585 err = sysfs_create_group(&dev->kobj, &lm90_temp2_offset_group);
1586 if (err)
1587 goto exit_remove_files;
1588 }
1589 if (data->flags & LM90_HAVE_EMERGENCY) {
1590 err = sysfs_create_group(&dev->kobj, &lm90_emergency_group);
1591 if (err)
1592 goto exit_remove_files;
1593 }
1594 if (data->flags & LM90_HAVE_EMERGENCY_ALARM) {
1595 err = sysfs_create_group(&dev->kobj,
1596 &lm90_emergency_alarm_group);
1597 if (err)
1598 goto exit_remove_files;
1599 }
1600 if (data->flags & LM90_HAVE_TEMP3) {
1601 err = sysfs_create_group(&dev->kobj, &lm90_temp3_group);
1602 if (err)
1603 goto exit_remove_files;
1604 } 1580 }
1605 1581
1582 err = sysfs_create_groups(&dev->kobj, data->groups);
1583 if (err)
1584 goto exit_remove_pec;
1585
1606 data->hwmon_dev = hwmon_device_register(dev); 1586 data->hwmon_dev = hwmon_device_register(dev);
1607 if (IS_ERR(data->hwmon_dev)) { 1587 if (IS_ERR(data->hwmon_dev)) {
1608 err = PTR_ERR(data->hwmon_dev); 1588 err = PTR_ERR(data->hwmon_dev);
@@ -1626,7 +1606,9 @@ static int lm90_probe(struct i2c_client *client,
1626exit_unregister: 1606exit_unregister:
1627 hwmon_device_unregister(data->hwmon_dev); 1607 hwmon_device_unregister(data->hwmon_dev);
1628exit_remove_files: 1608exit_remove_files:
1629 lm90_remove_files(client, data); 1609 sysfs_remove_groups(&dev->kobj, data->groups);
1610exit_remove_pec:
1611 device_remove_file(dev, &dev_attr_pec);
1630exit_restore: 1612exit_restore:
1631 lm90_restore_conf(client, data); 1613 lm90_restore_conf(client, data);
1632 regulator_disable(data->regulator); 1614 regulator_disable(data->regulator);
@@ -1639,7 +1621,8 @@ static int lm90_remove(struct i2c_client *client)
1639 struct lm90_data *data = i2c_get_clientdata(client); 1621 struct lm90_data *data = i2c_get_clientdata(client);
1640 1622
1641 hwmon_device_unregister(data->hwmon_dev); 1623 hwmon_device_unregister(data->hwmon_dev);
1642 lm90_remove_files(client, data); 1624 sysfs_remove_groups(&client->dev.kobj, data->groups);
1625 device_remove_file(&client->dev, &dev_attr_pec);
1643 lm90_restore_conf(client, data); 1626 lm90_restore_conf(client, data);
1644 regulator_disable(data->regulator); 1627 regulator_disable(data->regulator);
1645 1628