From 465e03ce7369d59c55bb7c66e9adcd2397af39c2 Mon Sep 17 00:00:00 2001 From: Jean Delvare Date: Fri, 13 Mar 2009 12:45:34 +0000 Subject: [PATCH] Properly encode and decode -128 degrees C. Fix ported from Linux 2.6. git-svn-id: http://lm-sensors.org/svn/lm-sensors/branches/lm-sensors-2.10@5686 7894878c-1315-0410-8ee3-d5d059ff63e0 --- CHANGES | 1 + kernel/chips/it87.c | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGES b/CHANGES index 003e6708..b9e183af 100644 --- a/CHANGES +++ b/CHANGES @@ -4,6 +4,7 @@ lm_sensors CHANGES file SVN-HEAD File lm_sensors.lsm: Delete, don't advertise a legacy branch File doc/developers/release_checklist: Skip mail to lsm + Module it87: Properly decode -128 degrees C (2.6 backport) Program sensors-detect: Fix detection of older DS1621 2.10.8 (20081216) diff --git a/kernel/chips/it87.c b/kernel/chips/it87.c index c3874665..9442c702 100644 --- a/kernel/chips/it87.c +++ b/kernel/chips/it87.c @@ -196,8 +196,8 @@ static inline u8 FAN_TO_REG(long rpm, int div) #define FAN_FROM_REG(val,div) ((val)==0?-1:(val)==255?0:1350000/((val)*(div))) #define TEMP_TO_REG(val) (SENSORS_LIMIT(((val)<0?(((val)-5)/10):\ - ((val)+5)/10),-127,127)) -#define TEMP_FROM_REG(val) (((val)>0x80?(val)-0x100:(val))*10) + ((val)+5)/10), -128, 127)) +#define TEMP_FROM_REG(val) ((val) * 10) #define VID_FROM_REG(val) ((val)==0x1f?0:(val)>=0x10?510-(val)*10:\ 205-(val)*5) @@ -233,15 +233,15 @@ struct it87_data { u8 in_min[9]; /* Register value */ u8 fan[3]; /* Register value */ u8 fan_min[3]; /* Register value */ - u8 temp[3]; /* Register value */ - u8 temp_high[3]; /* Register value */ - u8 temp_low[3]; /* Register value */ + s8 temp[3]; /* Register value */ + s8 temp_high[3]; /* Register value */ + s8 temp_low[3]; /* Register value */ u8 fan_div[3]; /* Register encoding, shifted right */ u8 vid; /* Register encoding, combined */ u32 alarms; /* Register encoding, combined */ u8 pwm[3]; /* Register value */ u8 fan_ctl[2]; /* Register encoding */ - u8 sg_tl[3][5]; /* Register value */ + s8 sg_tl[3][5]; /* Register value */ u8 sg_pwm[3][3]; /* Register value */ u8 sens[3]; /* 2 = Thermistor, 3 = PII/Celeron diode */