|
@@ -88,8 +88,8 @@
|
|
|
* Addresses to scan
|
|
|
* Address is fully defined internally and cannot be changed except for
|
|
|
* MAX6659, MAX6680 and MAX6681.
|
|
|
- * LM86, LM89, LM90, LM99, ADM1032, ADM1032-1, ADT7461, MAX6649, MAX6657
|
|
|
- * and MAX6658 have address 0x4c.
|
|
|
+ * LM86, LM89, LM90, LM99, ADM1032, ADM1032-1, ADT7461, MAX6649, MAX6657,
|
|
|
+ * MAX6658 and W83L771 have address 0x4c.
|
|
|
* ADM1032-2, ADT7461-2, LM89-1, LM99-1 and MAX6646 have address 0x4d.
|
|
|
* MAX6647 has address 0x4e.
|
|
|
* MAX6659 can have address 0x4c, 0x4d or 0x4e.
|
|
@@ -1237,10 +1237,23 @@ static int lm90_detect(struct i2c_client *new_client,
|
|
|
} else
|
|
|
if (address == 0x4C
|
|
|
&& man_id == 0x5C) { /* Winbond/Nuvoton */
|
|
|
- if ((chip_id & 0xFE) == 0x10 /* W83L771AWG/ASG */
|
|
|
- && (reg_config1 & 0x2A) == 0x00
|
|
|
- && reg_convrate <= 0x08) {
|
|
|
- name = "w83l771";
|
|
|
+ int reg_config2;
|
|
|
+
|
|
|
+ reg_config2 = i2c_smbus_read_byte_data(new_client,
|
|
|
+ LM90_REG_R_CONFIG2);
|
|
|
+ if (reg_config2 < 0)
|
|
|
+ return -ENODEV;
|
|
|
+
|
|
|
+ if ((reg_config1 & 0x2A) == 0x00
|
|
|
+ && (reg_config2 & 0xF8) == 0x00) {
|
|
|
+ if (chip_id == 0x01 /* W83L771W/G */
|
|
|
+ && reg_convrate <= 0x09) {
|
|
|
+ name = "w83l771";
|
|
|
+ } else
|
|
|
+ if ((chip_id & 0xFE) == 0x10 /* W83L771AWG/ASG */
|
|
|
+ && reg_convrate <= 0x08) {
|
|
|
+ name = "w83l771";
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|