aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuenter Roeck <linux@roeck-us.net>2014-07-18 10:31:18 -0400
committerGuenter Roeck <linux@roeck-us.net>2014-07-24 09:25:25 -0400
commit043572d5444116b9d9ad8ae763cf069e7accbc30 (patch)
treefdd8dc8c970e8d401a89f51d4594267896d548d2
parent9a3c4145af32125c5ee39c0272662b47307a8323 (diff)
hwmon: (smsc47m192) Fix temperature limit and vrm write operations
Temperature limit clamps are applied after converting the temperature from milli-degrees C to degrees C, so either the clamp limit needs to be specified in degrees C, not milli-degrees C, or clamping must happen before converting to degrees C. Use the latter method to avoid overflows. vrm is an u8, so the written value needs to be limited to [0, 255]. Cc: Axel Lin <axel.lin@ingics.com> Cc: stable@vger.kernel.org Signed-off-by: Guenter Roeck <linux@roeck-us.net> Reviewed-by: Jean Delvare <jdelvare@suse.de>
-rw-r--r--drivers/hwmon/smsc47m192.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/hwmon/smsc47m192.c b/drivers/hwmon/smsc47m192.c
index efee4c59239f..34b9a601ad07 100644
--- a/drivers/hwmon/smsc47m192.c
+++ b/drivers/hwmon/smsc47m192.c
@@ -86,7 +86,7 @@ static inline u8 IN_TO_REG(unsigned long val, int n)
86 */ 86 */
87static inline s8 TEMP_TO_REG(int val) 87static inline s8 TEMP_TO_REG(int val)
88{ 88{
89 return clamp_val(SCALE(val, 1, 1000), -128000, 127000); 89 return SCALE(clamp_val(val, -128000, 127000), 1, 1000);
90} 90}
91 91
92static inline int TEMP_FROM_REG(s8 val) 92static inline int TEMP_FROM_REG(s8 val)
@@ -384,6 +384,8 @@ static ssize_t set_vrm(struct device *dev, struct device_attribute *attr,
384 err = kstrtoul(buf, 10, &val); 384 err = kstrtoul(buf, 10, &val);
385 if (err) 385 if (err)
386 return err; 386 return err;
387 if (val > 255)
388 return -EINVAL;
387 389
388 data->vrm = val; 390 data->vrm = val;
389 return count; 391 return count;