|
@@ -539,15 +539,14 @@ static ssize_t set_sensor(struct device *dev, struct device_attribute *attr,
|
|
|
|
|
|
struct it87_data *data = dev_get_drvdata(dev);
|
|
|
long val;
|
|
|
+ u8 reg;
|
|
|
|
|
|
if (strict_strtol(buf, 10, &val) < 0)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- mutex_lock(&data->update_lock);
|
|
|
-
|
|
|
- data->sensor = it87_read_value(data, IT87_REG_TEMP_ENABLE);
|
|
|
- data->sensor &= ~(1 << nr);
|
|
|
- data->sensor &= ~(8 << nr);
|
|
|
+ reg = it87_read_value(data, IT87_REG_TEMP_ENABLE);
|
|
|
+ reg &= ~(1 << nr);
|
|
|
+ reg &= ~(8 << nr);
|
|
|
if (val == 2) { /* backwards compatibility */
|
|
|
dev_warn(dev, "Sensor type 2 is deprecated, please use 4 "
|
|
|
"instead\n");
|
|
@@ -555,13 +554,14 @@ static ssize_t set_sensor(struct device *dev, struct device_attribute *attr,
|
|
|
}
|
|
|
/* 3 = thermal diode; 4 = thermistor; 0 = disabled */
|
|
|
if (val == 3)
|
|
|
- data->sensor |= 1 << nr;
|
|
|
+ reg |= 1 << nr;
|
|
|
else if (val == 4)
|
|
|
- data->sensor |= 8 << nr;
|
|
|
- else if (val != 0) {
|
|
|
- mutex_unlock(&data->update_lock);
|
|
|
+ reg |= 8 << nr;
|
|
|
+ else if (val != 0)
|
|
|
return -EINVAL;
|
|
|
- }
|
|
|
+
|
|
|
+ mutex_lock(&data->update_lock);
|
|
|
+ data->sensor = reg;
|
|
|
it87_write_value(data, IT87_REG_TEMP_ENABLE, data->sensor);
|
|
|
mutex_unlock(&data->update_lock);
|
|
|
return count;
|