From b827b9a68efed46fb1d6bd1015515a3aa06c9d12 Mon Sep 17 00:00:00 2001 From: Frodo Looijaard Date: Sun, 27 Dec 1998 20:08:44 +0000 Subject: [PATCH] Fan value problems resolved git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@128 7894878c-1315-0410-8ee3-d5d059ff63e0 --- kernel/chips/lm78.c | 14 ++++++++------ kernel/chips/lm80.c | 4 ++-- kernel/chips/w83781d.c | 4 ++-- src/lm78.c | 14 ++++++++------ src/lm80.c | 4 ++-- src/w83781d.c | 4 ++-- 6 files changed, 24 insertions(+), 20 deletions(-) diff --git a/kernel/chips/lm78.c b/kernel/chips/lm78.c index 0dae05b7..f8a56de4 100644 --- a/kernel/chips/lm78.c +++ b/kernel/chips/lm78.c @@ -67,9 +67,9 @@ #define IN_TO_REG(val) (((val) * 10 + 8)/16) #define IN_FROM_REG(val) (((val) * 16) / 10) -#define FAN_TO_REG(val,div) ((val)==0?255:((1350000+(val))/\ - ((val)*2*(div))) & 0xff) -#define FAN_FROM_REG(val,div) ((val)==0?-1:(val)==255?0:1350000/((val)*2*(div))) +#define FAN_TO_REG(val,div) ((val)==0?255:((1350000+(val)*(div)/2)/\ + ((val)*(div))) & 0xff) +#define FAN_FROM_REG(val,div) ((val)==0?-1:(val)==255?0:1350000/((val)*(div))) #define TEMP_TO_REG(val) (((val)<0?(((val)-5)/10)&0xff:((val)+5)/10) & 0xff) #define TEMP_FROM_REG(val) (((val)>0x80?(val)-0x100:(val))*10) @@ -173,7 +173,7 @@ struct lm78_data { u8 temp; /* Register value */ u8 temp_over; /* Register value */ u8 temp_hyst; /* Register value */ - u8 fan_div[2]; /* Register encoding, shifted right */ + u8 fan_div[3]; /* Register encoding, shifted right */ u8 vid; /* Register encoding, combined */ u16 alarms; /* Register encoding, combined */ }; @@ -726,6 +726,8 @@ void lm78_update_client(struct i2c_client *client) (lm78_read_value(client,LM78_REG_ALARM2) << 8); data->last_updated = jiffies; data->valid = 1; + + data->fan_div[2] = 1; } up(&data->update_lock); @@ -782,9 +784,9 @@ void lm78_fan(struct i2c_client *client, int operation, int ctl_name, else if (operation == SENSORS_PROC_REAL_READ) { lm78_update_client(client); results[0] = FAN_FROM_REG(data->fan_min[nr-1], - DIV_FROM_REG(data->fan_min[nr-1])); + DIV_FROM_REG(data->fan_div[nr-1])); results[1] = FAN_FROM_REG(data->fan[nr-1], - DIV_FROM_REG(data->fan_min[nr-1])); + DIV_FROM_REG(data->fan_div[nr-1])); *nrels_mag = 2; } else if (operation == SENSORS_PROC_REAL_WRITE) { if (*nrels_mag >= 1) { diff --git a/kernel/chips/lm80.c b/kernel/chips/lm80.c index 87205255..72ba020e 100644 --- a/kernel/chips/lm80.c +++ b/kernel/chips/lm80.c @@ -66,9 +66,9 @@ #define IN_FROM_REG(val,nr) (val) #define FAN_TO_REG(val,div) ((val)==0?255:\ - ((1350000+(val)*(div))/((val)*(div)*2)) & 0xff) + ((1350000+(val)*(div)/2)/((val)*(div))) & 0xff) #define FAN_FROM_REG(val,div) ((val)==0?-1:\ - (val)==255?0:1350000/((div)*(val)*2)) + (val)==255?0:1350000/((div)*(val))) #define TEMP_FROM_REG(val) lm80_temp_from_reg(val) diff --git a/kernel/chips/w83781d.c b/kernel/chips/w83781d.c index f5e4068d..dba57d67 100644 --- a/kernel/chips/w83781d.c +++ b/kernel/chips/w83781d.c @@ -86,8 +86,8 @@ #define IN_TO_REG(val,nr) (((val) * 10 + 8)/16) #define IN_FROM_REG(val,nr) (((val) * 16) / 10) -#define FAN_TO_REG(val,div) ((val)==0?255:((1350000+(val))/\ - ((val)*2*(div))) & 0xff) +#define FAN_TO_REG(val,div) ((val)==0?255:((1350000+(val)*(div)/2)/\ + ((val)*(div))) & 0xff) #define FAN_FROM_REG(val,div) ((val)==0?-1:(val)==255?0:1350000/((val)*2*(div))) #define TEMP_TO_REG(val) (((val)<0?(((val)-5)/10)&0xff:((val)+5)/10) & 0xff) diff --git a/src/lm78.c b/src/lm78.c index 0dae05b7..f8a56de4 100644 --- a/src/lm78.c +++ b/src/lm78.c @@ -67,9 +67,9 @@ #define IN_TO_REG(val) (((val) * 10 + 8)/16) #define IN_FROM_REG(val) (((val) * 16) / 10) -#define FAN_TO_REG(val,div) ((val)==0?255:((1350000+(val))/\ - ((val)*2*(div))) & 0xff) -#define FAN_FROM_REG(val,div) ((val)==0?-1:(val)==255?0:1350000/((val)*2*(div))) +#define FAN_TO_REG(val,div) ((val)==0?255:((1350000+(val)*(div)/2)/\ + ((val)*(div))) & 0xff) +#define FAN_FROM_REG(val,div) ((val)==0?-1:(val)==255?0:1350000/((val)*(div))) #define TEMP_TO_REG(val) (((val)<0?(((val)-5)/10)&0xff:((val)+5)/10) & 0xff) #define TEMP_FROM_REG(val) (((val)>0x80?(val)-0x100:(val))*10) @@ -173,7 +173,7 @@ struct lm78_data { u8 temp; /* Register value */ u8 temp_over; /* Register value */ u8 temp_hyst; /* Register value */ - u8 fan_div[2]; /* Register encoding, shifted right */ + u8 fan_div[3]; /* Register encoding, shifted right */ u8 vid; /* Register encoding, combined */ u16 alarms; /* Register encoding, combined */ }; @@ -726,6 +726,8 @@ void lm78_update_client(struct i2c_client *client) (lm78_read_value(client,LM78_REG_ALARM2) << 8); data->last_updated = jiffies; data->valid = 1; + + data->fan_div[2] = 1; } up(&data->update_lock); @@ -782,9 +784,9 @@ void lm78_fan(struct i2c_client *client, int operation, int ctl_name, else if (operation == SENSORS_PROC_REAL_READ) { lm78_update_client(client); results[0] = FAN_FROM_REG(data->fan_min[nr-1], - DIV_FROM_REG(data->fan_min[nr-1])); + DIV_FROM_REG(data->fan_div[nr-1])); results[1] = FAN_FROM_REG(data->fan[nr-1], - DIV_FROM_REG(data->fan_min[nr-1])); + DIV_FROM_REG(data->fan_div[nr-1])); *nrels_mag = 2; } else if (operation == SENSORS_PROC_REAL_WRITE) { if (*nrels_mag >= 1) { diff --git a/src/lm80.c b/src/lm80.c index 87205255..72ba020e 100644 --- a/src/lm80.c +++ b/src/lm80.c @@ -66,9 +66,9 @@ #define IN_FROM_REG(val,nr) (val) #define FAN_TO_REG(val,div) ((val)==0?255:\ - ((1350000+(val)*(div))/((val)*(div)*2)) & 0xff) + ((1350000+(val)*(div)/2)/((val)*(div))) & 0xff) #define FAN_FROM_REG(val,div) ((val)==0?-1:\ - (val)==255?0:1350000/((div)*(val)*2)) + (val)==255?0:1350000/((div)*(val))) #define TEMP_FROM_REG(val) lm80_temp_from_reg(val) diff --git a/src/w83781d.c b/src/w83781d.c index f5e4068d..dba57d67 100644 --- a/src/w83781d.c +++ b/src/w83781d.c @@ -86,8 +86,8 @@ #define IN_TO_REG(val,nr) (((val) * 10 + 8)/16) #define IN_FROM_REG(val,nr) (((val) * 16) / 10) -#define FAN_TO_REG(val,div) ((val)==0?255:((1350000+(val))/\ - ((val)*2*(div))) & 0xff) +#define FAN_TO_REG(val,div) ((val)==0?255:((1350000+(val)*(div)/2)/\ + ((val)*(div))) & 0xff) #define FAN_FROM_REG(val,div) ((val)==0?-1:(val)==255?0:1350000/((val)*2*(div))) #define TEMP_TO_REG(val) (((val)<0?(((val)-5)/10)&0xff:((val)+5)/10) & 0xff)