aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/hwmon/lm80.c32
1 files changed, 14 insertions, 18 deletions
diff --git a/drivers/hwmon/lm80.c b/drivers/hwmon/lm80.c
index 8e9a0b1dc437..fe980d64dc05 100644
--- a/drivers/hwmon/lm80.c
+++ b/drivers/hwmon/lm80.c
@@ -86,13 +86,9 @@ static inline unsigned char FAN_TO_REG(unsigned rpm, unsigned div)
86#define FAN_FROM_REG(val, div) ((val) == 0 ? -1 : \ 86#define FAN_FROM_REG(val, div) ((val) == 0 ? -1 : \
87 (val) == 255 ? 0 : 1350000/((div) * (val))) 87 (val) == 255 ? 0 : 1350000/((div) * (val)))
88 88
89#define TEMP_FROM_REG(temp) ((temp) * 125 / 32) 89#define TEMP_FROM_REG(reg) ((reg) * 125 / 32)
90 90#define TEMP_TO_REG(temp) (DIV_ROUND_CLOSEST(clamp_val((temp), \
91#define TEMP_LIMIT_FROM_REG(val) (((val) > 0x80 ? \ 91 -128000, 127000), 1000) << 8)
92 (val) - 0x100 : (val)) * 1000)
93
94#define TEMP_LIMIT_TO_REG(val) clamp_val((val) < 0 ? \
95 ((val) - 500) / 1000 : ((val) + 500) / 1000, 0, 255)
96 92
97#define DIV_FROM_REG(val) (1 << (val)) 93#define DIV_FROM_REG(val) (1 << (val))
98 94
@@ -114,10 +110,10 @@ struct lm80_data {
114 u8 fan_min[2]; /* Register value */ 110 u8 fan_min[2]; /* Register value */
115 u8 fan_div[2]; /* Register encoding, shifted right */ 111 u8 fan_div[2]; /* Register encoding, shifted right */
116 s16 temp; /* Register values */ 112 s16 temp; /* Register values */
117 u8 temp_hot_max; /* Register value */ 113 s16 temp_hot_max; /* Register value, left shifted */
118 u8 temp_hot_hyst; /* Register value */ 114 s16 temp_hot_hyst; /* Register value, left shifted */
119 u8 temp_os_max; /* Register value */ 115 s16 temp_os_max; /* Register value, left shifted */
120 u8 temp_os_hyst; /* Register value */ 116 s16 temp_os_hyst; /* Register value, left shifted */
121 u16 alarms; /* Register encoding, combined */ 117 u16 alarms; /* Register encoding, combined */
122}; 118};
123 119
@@ -308,7 +304,7 @@ static ssize_t show_temp_##suffix(struct device *dev, \
308 struct lm80_data *data = lm80_update_device(dev); \ 304 struct lm80_data *data = lm80_update_device(dev); \
309 if (IS_ERR(data)) \ 305 if (IS_ERR(data)) \
310 return PTR_ERR(data); \ 306 return PTR_ERR(data); \
311 return sprintf(buf, "%d\n", TEMP_LIMIT_FROM_REG(data->value)); \ 307 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->value)); \
312} 308}
313show_temp(hot_max, temp_hot_max); 309show_temp(hot_max, temp_hot_max);
314show_temp(hot_hyst, temp_hot_hyst); 310show_temp(hot_hyst, temp_hot_hyst);
@@ -327,8 +323,8 @@ static ssize_t set_temp_##suffix(struct device *dev, \
327 return err; \ 323 return err; \
328\ 324\
329 mutex_lock(&data->update_lock); \ 325 mutex_lock(&data->update_lock); \
330 data->value = TEMP_LIMIT_TO_REG(val); \ 326 data->value = TEMP_TO_REG(val); \
331 lm80_write_value(client, reg, data->value); \ 327 lm80_write_value(client, reg, data->value >> 8); \
332 mutex_unlock(&data->update_lock); \ 328 mutex_unlock(&data->update_lock); \
333 return count; \ 329 return count; \
334} 330}
@@ -639,22 +635,22 @@ static struct lm80_data *lm80_update_device(struct device *dev)
639 rv = lm80_read_value(client, LM80_REG_TEMP_OS_MAX); 635 rv = lm80_read_value(client, LM80_REG_TEMP_OS_MAX);
640 if (rv < 0) 636 if (rv < 0)
641 goto abort; 637 goto abort;
642 data->temp_os_max = rv; 638 data->temp_os_max = rv << 8;
643 639
644 rv = lm80_read_value(client, LM80_REG_TEMP_OS_HYST); 640 rv = lm80_read_value(client, LM80_REG_TEMP_OS_HYST);
645 if (rv < 0) 641 if (rv < 0)
646 goto abort; 642 goto abort;
647 data->temp_os_hyst = rv; 643 data->temp_os_hyst = rv << 8;
648 644
649 rv = lm80_read_value(client, LM80_REG_TEMP_HOT_MAX); 645 rv = lm80_read_value(client, LM80_REG_TEMP_HOT_MAX);
650 if (rv < 0) 646 if (rv < 0)
651 goto abort; 647 goto abort;
652 data->temp_hot_max = rv; 648 data->temp_hot_max = rv << 8;
653 649
654 rv = lm80_read_value(client, LM80_REG_TEMP_HOT_HYST); 650 rv = lm80_read_value(client, LM80_REG_TEMP_HOT_HYST);
655 if (rv < 0) 651 if (rv < 0)
656 goto abort; 652 goto abort;
657 data->temp_hot_hyst = rv; 653 data->temp_hot_hyst = rv << 8;
658 654
659 rv = lm80_read_value(client, LM80_REG_FANDIV); 655 rv = lm80_read_value(client, LM80_REG_FANDIV);
660 if (rv < 0) 656 if (rv < 0)