summaryrefslogtreecommitdiffstats
path: root/drivers/hwmon
diff options
context:
space:
mode:
authorGuenter Roeck <linux@roeck-us.net>2014-08-05 12:54:04 -0400
committerGuenter Roeck <linux@roeck-us.net>2014-08-05 20:49:12 -0400
commit539a719f9b90f37b934b90ad52be646b9e74a9f6 (patch)
treeb3dc5d7646eea41985183f9c10d57d12e6b5f12c /drivers/hwmon
parente981429557cbe10c780fab1c1a237cb832757652 (diff)
hwmon: (emc6w201) Fix temperature limit range
Temperature limit range is [-127, 127], not [-127, 128]. The wrong range caused a bad limit to be written into the chip if the limit was set to a value of 128 degrees C or above. Also use DIV_ROUND_CLOSEST instead of a plain divide operation to reduce the rounding error when writing temperature limits. Signed-off-by: Guenter Roeck <linux@roeck-us.net> Reviewed-by: Jean Delvare <jdelvare@suse.de>
Diffstat (limited to 'drivers/hwmon')
-rw-r--r--drivers/hwmon/emc6w201.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/hwmon/emc6w201.c b/drivers/hwmon/emc6w201.c
index e87da902f3ae..ada90716448d 100644
--- a/drivers/hwmon/emc6w201.c
+++ b/drivers/hwmon/emc6w201.c
@@ -252,12 +252,12 @@ static ssize_t set_temp(struct device *dev, struct device_attribute *devattr,
252 if (err < 0) 252 if (err < 0)
253 return err; 253 return err;
254 254
255 val /= 1000; 255 val = DIV_ROUND_CLOSEST(val, 1000);
256 reg = (sf == min) ? EMC6W201_REG_TEMP_LOW(nr) 256 reg = (sf == min) ? EMC6W201_REG_TEMP_LOW(nr)
257 : EMC6W201_REG_TEMP_HIGH(nr); 257 : EMC6W201_REG_TEMP_HIGH(nr);
258 258
259 mutex_lock(&data->update_lock); 259 mutex_lock(&data->update_lock);
260 data->temp[sf][nr] = clamp_val(val, -127, 128); 260 data->temp[sf][nr] = clamp_val(val, -127, 127);
261 err = emc6w201_write8(client, reg, data->temp[sf][nr]); 261 err = emc6w201_write8(client, reg, data->temp[sf][nr]);
262 mutex_unlock(&data->update_lock); 262 mutex_unlock(&data->update_lock);
263 263