Commit 9a3dce62 authored by Zhuang Yuyao's avatar Zhuang Yuyao Committed by Alexandre Belloni

rtc: ds1307: ds3231 temperature s16 overflow

while retrieving temperature from ds3231, the result may be overflow
since s16 is too small for a multiplication with 250.

ie. if temp_buf[0] == 0x2d, the result (s16 temp) will be negative.
Signed-off-by: default avatarAkinobu Mita <akinobu.mita@gmail.com>
Tested-by: default avatarMichael Tatarinov <kukabu@gmail.com>
Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@free-electrons.com>
parent 00c9329e
...@@ -863,7 +863,7 @@ static void ds1307_trickle_of_init(struct i2c_client *client, ...@@ -863,7 +863,7 @@ static void ds1307_trickle_of_init(struct i2c_client *client,
* A user-initiated temperature conversion is not started by this function, * A user-initiated temperature conversion is not started by this function,
* so the temperature is updated once every 64 seconds. * so the temperature is updated once every 64 seconds.
*/ */
static int ds3231_hwmon_read_temp(struct device *dev, s16 *mC) static int ds3231_hwmon_read_temp(struct device *dev, s32 *mC)
{ {
struct ds1307 *ds1307 = dev_get_drvdata(dev); struct ds1307 *ds1307 = dev_get_drvdata(dev);
u8 temp_buf[2]; u8 temp_buf[2];
...@@ -892,7 +892,7 @@ static ssize_t ds3231_hwmon_show_temp(struct device *dev, ...@@ -892,7 +892,7 @@ static ssize_t ds3231_hwmon_show_temp(struct device *dev,
struct device_attribute *attr, char *buf) struct device_attribute *attr, char *buf)
{ {
int ret; int ret;
s16 temp; s32 temp;
ret = ds3231_hwmon_read_temp(dev, &temp); ret = ds3231_hwmon_read_temp(dev, &temp);
if (ret) if (ret)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment