diff options
author | Guenter Roeck <linux@roeck-us.net> | 2014-04-04 12:01:33 -0400 |
---|---|---|
committer | Jean Delvare <jdelvare@suse.de> | 2014-04-04 12:01:33 -0400 |
commit | b76552b310645fddd76dad5e87d0e8eb3d15e4de (patch) | |
tree | 5b3cc60dcbdf289f8a09835cdbf06fdda3f7a9f9 | |
parent | 2fd638feb6b39cbbc10989a57a25c868fe65b118 (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.c | 42 |
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 }; | |||
157 | struct lm63_data { | 157 | struct 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 | ||
1164 | exit_remove_files: | 1161 | exit_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 | ||