aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuenter Roeck <linux@roeck-us.net>2014-04-04 12:01:33 -0400
committerJean Delvare <jdelvare@suse.de>2014-04-04 12:01:33 -0400
commitb76552b310645fddd76dad5e87d0e8eb3d15e4de (patch)
tree5b3cc60dcbdf289f8a09835cdbf06fdda3f7a9f9
parent2fd638feb6b39cbbc10989a57a25c868fe65b118 (diff)
hwmon: (lm63) Create all sysfs groups in one call
We can create all sysfs groups in one call by using sysfs_create_groups instead of using sysfs_create_group individually for each group. Signed-off-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Jean Delvare <jdelvare@suse.de>
-rw-r--r--drivers/hwmon/lm63.c42
1 files changed, 14 insertions, 28 deletions
diff --git a/drivers/hwmon/lm63.c b/drivers/hwmon/lm63.c
index 55b7d98cb742..7dc4873b343f 100644
--- a/drivers/hwmon/lm63.c
+++ b/drivers/hwmon/lm63.c
@@ -157,6 +157,7 @@ enum chips { lm63, lm64, lm96163 };
157struct lm63_data { 157struct lm63_data {
158 struct device *hwmon_dev; 158 struct device *hwmon_dev;
159 struct mutex update_lock; 159 struct mutex update_lock;
160 const struct attribute_group *groups[5];
160 char valid; /* zero until following fields are valid */ 161 char valid; /* zero until following fields are valid */
161 char lut_valid; /* zero until lut fields are valid */ 162 char lut_valid; /* zero until lut fields are valid */
162 unsigned long last_updated; /* in jiffies */ 163 unsigned long last_updated; /* in jiffies */
@@ -1116,6 +1117,7 @@ static int lm63_probe(struct i2c_client *client,
1116{ 1117{
1117 struct device *dev = &client->dev; 1118 struct device *dev = &client->dev;
1118 struct lm63_data *data; 1119 struct lm63_data *data;
1120 int groups = 0;
1119 int err; 1121 int err;
1120 1122
1121 data = devm_kzalloc(dev, sizeof(struct lm63_data), GFP_KERNEL); 1123 data = devm_kzalloc(dev, sizeof(struct lm63_data), GFP_KERNEL);
@@ -1135,24 +1137,19 @@ static int lm63_probe(struct i2c_client *client,
1135 lm63_init_client(client); 1137 lm63_init_client(client);
1136 1138
1137 /* Register sysfs hooks */ 1139 /* Register sysfs hooks */
1138 err = sysfs_create_group(&dev->kobj, &lm63_group); 1140 data->groups[groups++] = &lm63_group;
1139 if (err) 1141 if (data->config & 0x04) /* tachometer enabled */
1140 return err; 1142 data->groups[groups++] = &lm63_group_fan1;
1141 if (data->config & 0x04) { /* tachometer enabled */
1142 err = sysfs_create_group(&dev->kobj, &lm63_group_fan1);
1143 if (err)
1144 goto exit_remove_files;
1145 }
1146 if (data->kind == lm96163) {
1147 err = sysfs_create_group(&dev->kobj, &lm63_group_temp2_type);
1148 if (err)
1149 goto exit_remove_files;
1150 1143
1151 err = sysfs_create_group(&dev->kobj, &lm63_group_extra_lut); 1144 if (data->kind == lm96163) {
1152 if (err) 1145 data->groups[groups++] = &lm63_group_temp2_type;
1153 goto exit_remove_files; 1146 data->groups[groups++] = &lm63_group_extra_lut;
1154 } 1147 }
1155 1148
1149 err = sysfs_create_groups(&dev->kobj, data->groups);
1150 if (err)
1151 return err;
1152
1156 data->hwmon_dev = hwmon_device_register(dev); 1153 data->hwmon_dev = hwmon_device_register(dev);
1157 if (IS_ERR(data->hwmon_dev)) { 1154 if (IS_ERR(data->hwmon_dev)) {
1158 err = PTR_ERR(data->hwmon_dev); 1155 err = PTR_ERR(data->hwmon_dev);
@@ -1162,12 +1159,7 @@ static int lm63_probe(struct i2c_client *client,
1162 return 0; 1159 return 0;
1163 1160
1164exit_remove_files: 1161exit_remove_files:
1165 sysfs_remove_group(&dev->kobj, &lm63_group); 1162 sysfs_remove_groups(&dev->kobj, data->groups);
1166 sysfs_remove_group(&dev->kobj, &lm63_group_fan1);
1167 if (data->kind == lm96163) {
1168 sysfs_remove_group(&dev->kobj, &lm63_group_temp2_type);
1169 sysfs_remove_group(&dev->kobj, &lm63_group_extra_lut);
1170 }
1171 return err; 1163 return err;
1172} 1164}
1173 1165
@@ -1176,13 +1168,7 @@ static int lm63_remove(struct i2c_client *client)
1176 struct lm63_data *data = i2c_get_clientdata(client); 1168 struct lm63_data *data = i2c_get_clientdata(client);
1177 1169
1178 hwmon_device_unregister(data->hwmon_dev); 1170 hwmon_device_unregister(data->hwmon_dev);
1179 sysfs_remove_group(&client->dev.kobj, &lm63_group); 1171 sysfs_remove_groups(&client->dev.kobj, data->groups);
1180 sysfs_remove_group(&client->dev.kobj, &lm63_group_fan1);
1181 if (data->kind == lm96163) {
1182 sysfs_remove_group(&client->dev.kobj, &lm63_group_temp2_type);
1183 sysfs_remove_group(&client->dev.kobj, &lm63_group_extra_lut);
1184 }
1185
1186 return 0; 1172 return 0;
1187} 1173}
1188 1174