|
@@ -16,6 +16,7 @@
|
|
|
#include <linux/err.h>
|
|
|
#include <linux/hwmon.h>
|
|
|
#include <linux/hwmon-sysfs.h>
|
|
|
+#include <linux/bitops.h>
|
|
|
|
|
|
/*
|
|
|
* AD7314 temperature masks
|
|
@@ -67,7 +68,7 @@ static ssize_t ad7314_show_temperature(struct device *dev,
|
|
|
switch (spi_get_device_id(chip->spi_dev)->driver_data) {
|
|
|
case ad7314:
|
|
|
data = (ret & AD7314_TEMP_MASK) >> AD7314_TEMP_SHIFT;
|
|
|
- data = (data << 6) >> 6;
|
|
|
+ data = sign_extend32(data, 9);
|
|
|
|
|
|
return sprintf(buf, "%d\n", 250 * data);
|
|
|
case adt7301:
|
|
@@ -78,7 +79,7 @@ static ssize_t ad7314_show_temperature(struct device *dev,
|
|
|
* register. 1lsb - 31.25 milli degrees centigrade
|
|
|
*/
|
|
|
data = ret & ADT7301_TEMP_MASK;
|
|
|
- data = (data << 2) >> 2;
|
|
|
+ data = sign_extend32(data, 13);
|
|
|
|
|
|
return sprintf(buf, "%d\n",
|
|
|
DIV_ROUND_CLOSEST(data * 3125, 100));
|