diff options
author | Guenter Roeck <linux@roeck-us.net> | 2014-04-04 12:01:35 -0400 |
---|---|---|
committer | Jean Delvare <jdelvare@suse.de> | 2014-04-04 12:01:35 -0400 |
commit | 084489e64cad50b2a3927abafc69b6fd72eb56bc (patch) | |
tree | 73f9479ea4cfe6408d56c13cb8af652ae4439337 /drivers/hwmon | |
parent | d89fa6867d39ccf589799da50b1e1ee1c0713c4d (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.c | 69 |
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 | ||
367 | struct lm90_data { | 367 | struct 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 | ||
1405 | static 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 | |||
1421 | static void lm90_restore_conf(struct i2c_client *client, struct lm90_data *data) | 1406 | static 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, | |||
1626 | exit_unregister: | 1606 | exit_unregister: |
1627 | hwmon_device_unregister(data->hwmon_dev); | 1607 | hwmon_device_unregister(data->hwmon_dev); |
1628 | exit_remove_files: | 1608 | exit_remove_files: |
1629 | lm90_remove_files(client, data); | 1609 | sysfs_remove_groups(&dev->kobj, data->groups); |
1610 | exit_remove_pec: | ||
1611 | device_remove_file(dev, &dev_attr_pec); | ||
1630 | exit_restore: | 1612 | exit_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 | ||