Fix w83781d temp
PATCH 1/1 Fix w83781d temp
Hi Greg,
This patch fixes the temperature handling in the w83781d driver:
1* Fix bad magnitude.
2* Use MMH's lm75.h.
3* Allow negative temperatures.
This applies on top of the patches stack. In particular, the asb100 patch needs to be applied before this one so that lm75.h is present.
Thanks.
drivers/i2c/chips/w83781d.c renamed from drivers/i2c/chips/w83781d.c.orig +14 -16
@@ -43,6 +43,7 @@#include <linux/i2c-sensor.h> #include <linux/i2c-vid.h> #include <asm/io.h> +#include "lm75.h" /* RT Table support #defined so we can take it out if it gets bothersome */ #define W83781D_RT 1
@@ -170,17 +171,14 @@ ((val) = 255 ? 0 : \ 1350000 / ((val) * (div)))) -#define TEMP_TO_REG (val) (SENSORS_LIMIT(((val / 10) < 0 ? (((val / 10) - 5) / 10) : \ - ((val / 10) + 5) / 10), 0, 255)) -#define TEMP_FROM_REG (val) ((((val ) > 0x80 ? (val) - 0x100 : (val)) * 10) * 10) - -#define TEMP_ADD_TO_REG (val) (SENSORS_LIMIT(((((val / 10) + 2) / 5) << 7),\ - 0, 0xffff)) -#define TEMP_ADD_FROM_REG (val) ((((val) >> 7) * 5) * 10) - -#define AS99127_TEMP_ADD_TO_REG (val) (SENSORS_LIMIT((((((val / 10) + 2)*4)/10) \ - << 7), 0, 0xffff)) -#define AS99127_TEMP_ADD_FROM_REG (val) (((((val) >> 7) * 10) / 4) * 10) +#define TEMP_TO_REG (val) (SENSORS_LIMIT(((val) < 0 ? (val)+0x100*1000 \ + : (val)) / 1000, 0, 0xff)) +#define TEMP_FROM_REG (val) (((val) & 0x80 ? (val)-0x100 : (val)) * 1000) + +#define AS99127_TEMP_ADD_TO_REG (val) (SENSORS_LIMIT((((val) < 0 ? (val)+0x10000*250 \ + : (val)) / 250) << 7, 0, 0xffff)) +#define AS99127_TEMP_ADD_FROM_REG (val) ((((val) & 0x8000 ? (val)-0x10000 : (val)) \ + >> 7) * 250)#define ALARMS_FROM_REG (val) (val)#define PWM_FROM_REG (val) (val)
@@ -437,8 +435,8 @@return sprintf (buf,"%ld\n" , \ (long)AS99127_TEMP_ADD_FROM_REG(data->reg##_add[nr-2])); \ }else { \ -return sprintf (buf,"%ld\n" , \ - (long)TEMP_ADD_FROM_REG(data->reg##_add[nr-2])); \ +return sprintf (buf,"%d\n" , \ + LM75_TEMP_FROM_REG(data->reg##_add[nr-2])); \ } \ }else {/* TEMP1 */ \return sprintf (buf,"%ld\n" , (long )TEMP_FROM_REG (data->reg)); \
@@ -453,15 +451,15 @@ { \struct i2c_client *client =to_i2c_client (dev); \struct w83781d_data *data =i2c_get_clientdata (client); \ -u32 val; \ +s32 val; \ \ - val =simple_strtoul (buf,NULL ,10 ); \ + val =simple_strtol (buf,NULL ,10 ); \ \if (nr >=2 ) {/* TEMP2 and TEMP3 */ \ if (data->type = as99127f) \ data->temp_##reg##_add[nr-2] = AS99127_TEMP_ADD_TO_REG(val); \ else \ - data->temp_##reg##_add[nr-2] = TEMP_ADD_TO_REG(val); \ + data->temp_##reg##_add[nr-2] = LM75_TEMP_TO_REG(val); \ \ w83781d_write_value(client, W83781D_REG_TEMP_##REG(nr), \ data->temp_##reg##_add[nr-2]); \
Signature · 2 lines
Jean Delvare http://www.ensicaen.ismra.fr/~delvare/
PATCH 1/1 Fix w83781d temp
Quoted 6 lines
Quoted 3 lines
This applies on top of the patches stack. In particular, the asb100 patch needs to be applied before this one so that
lm75.his present.Actually, it only requires an earlier patch...
http://archives.andrew.net.au/lm-sensors/msg05580.html
You're perfectly right. I don't know why I though that the lm75.h addition was part of the asb100 patch. It wouldn't have fit well in the "one patch, one thing" philosphy we try to stick too.
So I'm sorry for the trouble, the "w83781d temp" patch doesn't require the "asb100" at all, only the "lm75.h" patch, and since that one is already in Linux 2.6.1, it doesn't require anything at all.
Signature · 2 lines
Jean Delvare http://www.ensicaen.ismra.fr/~delvare/
PATCH 1/1 Fix w83781d temp
In reply to Jean DelvareQuoted 7 lines · Jean Delvare
This patch fixes the temperature handling in the w83781d driver:
1* Fix bad magnitude.
2* Use MMH'slm75.h.
3* Allow negative temperatures.This applies on top of the patches stack. In particular, the asb100 patch needs to be applied before this one so that
lm75.his present.
Actually, it only requires an earlier patch...
http://archives.andrew.net.au/lm-sensors/msg05580.html
Regards,
Signature · 2 lines
Mark M. Hoffman [email protected]
Greg KH
AppliedPATCH 1/1 Fix w83781d temp
In reply to Jean DelvareQuoted 9 lines · Jean Delvare
Hi Greg,
This patch fixes the temperature handling in the w83781d driver:
1* Fix bad magnitude.
2* Use MMH'slm75.h.
3* Allow negative temperatures.This applies on top of the patches stack. In particular, the asb100 patch needs to be applied before this one so that
lm75.his present.
Applied, thanks.
greg k-h