On Thu, Oct 13, 2011 at 03:49:08PM -0400, Jean Delvare wrote: > The w83627ehf driver is improperly reporting thermal diode sensors as > type 2, instead of 3. This caused "sensors" and possibly other > monitoring tools to report these sensors as "transistor" instead of > "thermal diode". > > Furthermore, diode subtype selection (CPU vs. external) is only > supported by the original W83627EHF/EHG. All later models only support > CPU diode type, and some (NCT6776F) don't even have the register in > question so we should avoid reading from it. > > Signed-off-by: Jean Delvare <khali@xxxxxxxxxxxx> > Cc: stable@xxxxxxxxxx Good catch. Applied. Thanks, Guenter > --- > drivers/hwmon/w83627ehf.c | 15 +++++++++++---- > 1 file changed, 11 insertions(+), 4 deletions(-) > > --- linux-3.1-rc9.orig/drivers/hwmon/w83627ehf.c 2011-10-13 18:21:43.000000000 +0200 > +++ linux-3.1-rc9/drivers/hwmon/w83627ehf.c 2011-10-13 21:40:13.000000000 +0200 > @@ -1718,7 +1718,8 @@ static void w83627ehf_device_remove_file > } > > /* Get the monitoring functions started */ > -static inline void __devinit w83627ehf_init_device(struct w83627ehf_data *data) > +static inline void __devinit w83627ehf_init_device(struct w83627ehf_data *data, > + enum kinds kind) > { > int i; > u8 tmp, diode; > @@ -1749,10 +1750,16 @@ static inline void __devinit w83627ehf_i > w83627ehf_write_value(data, W83627EHF_REG_VBAT, tmp | 0x01); > > /* Get thermal sensor types */ > - diode = w83627ehf_read_value(data, W83627EHF_REG_DIODE); > + switch (kind) { > + case w83627ehf: > + diode = w83627ehf_read_value(data, W83627EHF_REG_DIODE); > + break; > + default: > + diode = 0x70; > + } > for (i = 0; i < 3; i++) { > if ((tmp & (0x02 << i))) > - data->temp_type[i] = (diode & (0x10 << i)) ? 1 : 2; > + data->temp_type[i] = (diode & (0x10 << i)) ? 1 : 3; > else > data->temp_type[i] = 4; /* thermistor */ > } > @@ -2084,7 +2091,7 @@ static int __devinit w83627ehf_probe(str > } > > /* Initialize the chip */ > - w83627ehf_init_device(data); > + w83627ehf_init_device(data, sio_data->kind); > > data->vrm = vid_which_vrm(); > superio_enter(sio_data->sioreg); > > > -- > Jean Delvare > > _______________________________________________ > lm-sensors mailing list > lm-sensors@xxxxxxxxxxxxxx > http://lists.lm-sensors.org/mailman/listinfo/lm-sensors _______________________________________________ lm-sensors mailing list lm-sensors@xxxxxxxxxxxxxx http://lists.lm-sensors.org/mailman/listinfo/lm-sensors