|
@@ -700,34 +700,69 @@ static const struct attribute_group lm87_group = {
|
|
|
.attrs = lm87_attributes,
|
|
|
};
|
|
|
|
|
|
-static struct attribute *lm87_attributes_opt[] = {
|
|
|
+static struct attribute *lm87_attributes_in6[] = {
|
|
|
&dev_attr_in6_input.attr,
|
|
|
&dev_attr_in6_min.attr,
|
|
|
&dev_attr_in6_max.attr,
|
|
|
&sensor_dev_attr_in6_alarm.dev_attr.attr,
|
|
|
+ NULL
|
|
|
+};
|
|
|
+
|
|
|
+static const struct attribute_group lm87_group_in6 = {
|
|
|
+ .attrs = lm87_attributes_in6,
|
|
|
+};
|
|
|
|
|
|
+static struct attribute *lm87_attributes_fan1[] = {
|
|
|
&dev_attr_fan1_input.attr,
|
|
|
&dev_attr_fan1_min.attr,
|
|
|
&dev_attr_fan1_div.attr,
|
|
|
&sensor_dev_attr_fan1_alarm.dev_attr.attr,
|
|
|
+ NULL
|
|
|
+};
|
|
|
+
|
|
|
+static const struct attribute_group lm87_group_fan1 = {
|
|
|
+ .attrs = lm87_attributes_fan1,
|
|
|
+};
|
|
|
|
|
|
+static struct attribute *lm87_attributes_in7[] = {
|
|
|
&dev_attr_in7_input.attr,
|
|
|
&dev_attr_in7_min.attr,
|
|
|
&dev_attr_in7_max.attr,
|
|
|
&sensor_dev_attr_in7_alarm.dev_attr.attr,
|
|
|
+ NULL
|
|
|
+};
|
|
|
|
|
|
+static const struct attribute_group lm87_group_in7 = {
|
|
|
+ .attrs = lm87_attributes_in7,
|
|
|
+};
|
|
|
+
|
|
|
+static struct attribute *lm87_attributes_fan2[] = {
|
|
|
&dev_attr_fan2_input.attr,
|
|
|
&dev_attr_fan2_min.attr,
|
|
|
&dev_attr_fan2_div.attr,
|
|
|
&sensor_dev_attr_fan2_alarm.dev_attr.attr,
|
|
|
+ NULL
|
|
|
+};
|
|
|
|
|
|
+static const struct attribute_group lm87_group_fan2 = {
|
|
|
+ .attrs = lm87_attributes_fan2,
|
|
|
+};
|
|
|
+
|
|
|
+static struct attribute *lm87_attributes_temp3[] = {
|
|
|
&dev_attr_temp3_input.attr,
|
|
|
&dev_attr_temp3_max.attr,
|
|
|
&dev_attr_temp3_min.attr,
|
|
|
&dev_attr_temp3_crit.attr,
|
|
|
&sensor_dev_attr_temp3_alarm.dev_attr.attr,
|
|
|
&sensor_dev_attr_temp3_fault.dev_attr.attr,
|
|
|
+ NULL
|
|
|
+};
|
|
|
|
|
|
+static const struct attribute_group lm87_group_temp3 = {
|
|
|
+ .attrs = lm87_attributes_temp3,
|
|
|
+};
|
|
|
+
|
|
|
+static struct attribute *lm87_attributes_in0_5[] = {
|
|
|
&dev_attr_in0_input.attr,
|
|
|
&dev_attr_in0_min.attr,
|
|
|
&dev_attr_in0_max.attr,
|
|
@@ -736,15 +771,21 @@ static struct attribute *lm87_attributes_opt[] = {
|
|
|
&dev_attr_in5_min.attr,
|
|
|
&dev_attr_in5_max.attr,
|
|
|
&sensor_dev_attr_in5_alarm.dev_attr.attr,
|
|
|
+ NULL
|
|
|
+};
|
|
|
+
|
|
|
+static const struct attribute_group lm87_group_in0_5 = {
|
|
|
+ .attrs = lm87_attributes_in0_5,
|
|
|
+};
|
|
|
|
|
|
+static struct attribute *lm87_attributes_vid[] = {
|
|
|
&dev_attr_cpu0_vid.attr,
|
|
|
&dev_attr_vrm.attr,
|
|
|
-
|
|
|
NULL
|
|
|
};
|
|
|
|
|
|
-static const struct attribute_group lm87_group_opt = {
|
|
|
- .attrs = lm87_attributes_opt,
|
|
|
+static const struct attribute_group lm87_group_vid = {
|
|
|
+ .attrs = lm87_attributes_vid,
|
|
|
};
|
|
|
|
|
|
/* Return 0 if detection is successful, -ENODEV otherwise */
|
|
@@ -782,6 +823,20 @@ static int lm87_detect(struct i2c_client *new_client,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static void lm87_remove_files(struct i2c_client *client)
|
|
|
+{
|
|
|
+ struct device *dev = &client->dev;
|
|
|
+
|
|
|
+ sysfs_remove_group(&dev->kobj, &lm87_group);
|
|
|
+ sysfs_remove_group(&dev->kobj, &lm87_group_in6);
|
|
|
+ sysfs_remove_group(&dev->kobj, &lm87_group_fan1);
|
|
|
+ sysfs_remove_group(&dev->kobj, &lm87_group_in7);
|
|
|
+ sysfs_remove_group(&dev->kobj, &lm87_group_fan2);
|
|
|
+ sysfs_remove_group(&dev->kobj, &lm87_group_temp3);
|
|
|
+ sysfs_remove_group(&dev->kobj, &lm87_group_in0_5);
|
|
|
+ sysfs_remove_group(&dev->kobj, &lm87_group_vid);
|
|
|
+}
|
|
|
+
|
|
|
static int lm87_probe(struct i2c_client *new_client,
|
|
|
const struct i2c_device_id *id)
|
|
|
{
|
|
@@ -816,89 +871,46 @@ static int lm87_probe(struct i2c_client *new_client,
|
|
|
goto exit_free;
|
|
|
|
|
|
if (data->channel & CHAN_NO_FAN(0)) {
|
|
|
- if ((err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_in6_input))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_in6_min))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_in6_max))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &sensor_dev_attr_in6_alarm.dev_attr)))
|
|
|
+ err = sysfs_create_group(&new_client->dev.kobj,
|
|
|
+ &lm87_group_in6);
|
|
|
+ if (err)
|
|
|
goto exit_remove;
|
|
|
} else {
|
|
|
- if ((err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_fan1_input))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_fan1_min))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_fan1_div))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &sensor_dev_attr_fan1_alarm.dev_attr)))
|
|
|
+ err = sysfs_create_group(&new_client->dev.kobj,
|
|
|
+ &lm87_group_fan1);
|
|
|
+ if (err)
|
|
|
goto exit_remove;
|
|
|
}
|
|
|
|
|
|
if (data->channel & CHAN_NO_FAN(1)) {
|
|
|
- if ((err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_in7_input))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_in7_min))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_in7_max))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &sensor_dev_attr_in7_alarm.dev_attr)))
|
|
|
+ err = sysfs_create_group(&new_client->dev.kobj,
|
|
|
+ &lm87_group_in7);
|
|
|
+ if (err)
|
|
|
goto exit_remove;
|
|
|
} else {
|
|
|
- if ((err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_fan2_input))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_fan2_min))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_fan2_div))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &sensor_dev_attr_fan2_alarm.dev_attr)))
|
|
|
+ err = sysfs_create_group(&new_client->dev.kobj,
|
|
|
+ &lm87_group_fan2);
|
|
|
+ if (err)
|
|
|
goto exit_remove;
|
|
|
}
|
|
|
|
|
|
if (data->channel & CHAN_TEMP3) {
|
|
|
- if ((err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_temp3_input))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_temp3_max))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_temp3_min))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_temp3_crit))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &sensor_dev_attr_temp3_alarm.dev_attr))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &sensor_dev_attr_temp3_fault.dev_attr)))
|
|
|
+ err = sysfs_create_group(&new_client->dev.kobj,
|
|
|
+ &lm87_group_temp3);
|
|
|
+ if (err)
|
|
|
goto exit_remove;
|
|
|
} else {
|
|
|
- if ((err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_in0_input))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_in0_min))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_in0_max))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &sensor_dev_attr_in0_alarm.dev_attr))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_in5_input))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_in5_min))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_in5_max))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &sensor_dev_attr_in5_alarm.dev_attr)))
|
|
|
+ err = sysfs_create_group(&new_client->dev.kobj,
|
|
|
+ &lm87_group_in0_5);
|
|
|
+ if (err)
|
|
|
goto exit_remove;
|
|
|
}
|
|
|
|
|
|
if (!(data->channel & CHAN_NO_VID)) {
|
|
|
data->vrm = vid_which_vrm();
|
|
|
- if ((err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_cpu0_vid))
|
|
|
- || (err = device_create_file(&new_client->dev,
|
|
|
- &dev_attr_vrm)))
|
|
|
+ err = sysfs_create_group(&new_client->dev.kobj,
|
|
|
+ &lm87_group_vid);
|
|
|
+ if (err)
|
|
|
goto exit_remove;
|
|
|
}
|
|
|
|
|
@@ -911,8 +923,7 @@ static int lm87_probe(struct i2c_client *new_client,
|
|
|
return 0;
|
|
|
|
|
|
exit_remove:
|
|
|
- sysfs_remove_group(&new_client->dev.kobj, &lm87_group);
|
|
|
- sysfs_remove_group(&new_client->dev.kobj, &lm87_group_opt);
|
|
|
+ lm87_remove_files(new_client);
|
|
|
exit_free:
|
|
|
lm87_write_value(new_client, LM87_REG_CONFIG, data->config);
|
|
|
kfree(data);
|
|
@@ -967,8 +978,7 @@ static int lm87_remove(struct i2c_client *client)
|
|
|
struct lm87_data *data = i2c_get_clientdata(client);
|
|
|
|
|
|
hwmon_device_unregister(data->hwmon_dev);
|
|
|
- sysfs_remove_group(&client->dev.kobj, &lm87_group);
|
|
|
- sysfs_remove_group(&client->dev.kobj, &lm87_group_opt);
|
|
|
+ lm87_remove_files(client);
|
|
|
|
|
|
lm87_write_value(client, LM87_REG_CONFIG, data->config);
|
|
|
kfree(data);
|