Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

hwmon: (lm90) Add support for the W83L771W/G

I was wondering if that chip ever existed publicly... Apparently yes,
so add support for it.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Tested-by: Alexander Stein <alexander.stein@informatik.tu-chemnitz.de>
Acked-by: Guenter Roeck <guenter.roeck@ericsson.com>

authored by

Jean Delvare and committed by
Jean Delvare
c4f99a2b 0c01b644

+31 -10
+11 -3
Documentation/hwmon/lm90
··· 95 95 0x4c, 0x4d and 0x4e 96 96 Datasheet: Publicly available at the Maxim website 97 97 http://www.maxim-ic.com/datasheet/index.mvp/id/4199 98 + * Winbond/Nuvoton W83L771W/G 99 + Prefix: 'w83l771' 100 + Addresses scanned: I2C 0x4c 101 + Datasheet: No longer available 98 102 * Winbond/Nuvoton W83L771AWG/ASG 99 103 Prefix: 'w83l771' 100 104 Addresses scanned: I2C 0x4c ··· 173 169 * Second critical temperature limit 174 170 * Two remote sensors 175 171 176 - W83L771AWG/ASG 177 - * The AWG and ASG variants only differ in package format. 172 + W83L771W/G 173 + * The G variant is lead-free, otherwise similar to the W. 178 174 * Filter and alert configuration register at 0xBF 179 - * Diode ideality factor configuration (remote sensor) at 0xE3 180 175 * Moving average (depending on conversion rate) 176 + 177 + W83L771AWG/ASG 178 + * Successor of the W83L771W/G, same features. 179 + * The AWG and ASG variants only differ in package format. 180 + * Diode ideality factor configuration (remote sensor) at 0xE3 181 181 182 182 All temperature values are given in degrees Celsius. Resolution 183 183 is 1.0 degree for the local temperature, 0.125 degree for the remote
+1 -1
drivers/hwmon/Kconfig
··· 615 615 LM86, LM89 and LM99, Analog Devices ADM1032 and ADT7461, Maxim 616 616 MAX6646, MAX6647, MAX6648, MAX6649, MAX6657, MAX6658, MAX6659, 617 617 MAX6680, MAX6681, MAX6692, MAX6695, MAX6696, and Winbond/Nuvoton 618 - W83L771AWG/ASG sensor chips. 618 + W83L771W/G/AWG/ASG sensor chips. 619 619 620 620 This driver can also be built as a module. If so, the module 621 621 will be called lm90.
+19 -6
drivers/hwmon/lm90.c
··· 88 88 * Addresses to scan 89 89 * Address is fully defined internally and cannot be changed except for 90 90 * MAX6659, MAX6680 and MAX6681. 91 - * LM86, LM89, LM90, LM99, ADM1032, ADM1032-1, ADT7461, MAX6649, MAX6657 92 - * and MAX6658 have address 0x4c. 91 + * LM86, LM89, LM90, LM99, ADM1032, ADM1032-1, ADT7461, MAX6649, MAX6657, 92 + * MAX6658 and W83L771 have address 0x4c. 93 93 * ADM1032-2, ADT7461-2, LM89-1, LM99-1 and MAX6646 have address 0x4d. 94 94 * MAX6647 has address 0x4e. 95 95 * MAX6659 can have address 0x4c, 0x4d or 0x4e. ··· 1237 1237 } else 1238 1238 if (address == 0x4C 1239 1239 && man_id == 0x5C) { /* Winbond/Nuvoton */ 1240 - if ((chip_id & 0xFE) == 0x10 /* W83L771AWG/ASG */ 1241 - && (reg_config1 & 0x2A) == 0x00 1242 - && reg_convrate <= 0x08) { 1243 - name = "w83l771"; 1240 + int reg_config2; 1241 + 1242 + reg_config2 = i2c_smbus_read_byte_data(new_client, 1243 + LM90_REG_R_CONFIG2); 1244 + if (reg_config2 < 0) 1245 + return -ENODEV; 1246 + 1247 + if ((reg_config1 & 0x2A) == 0x00 1248 + && (reg_config2 & 0xF8) == 0x00) { 1249 + if (chip_id == 0x01 /* W83L771W/G */ 1250 + && reg_convrate <= 0x09) { 1251 + name = "w83l771"; 1252 + } else 1253 + if ((chip_id & 0xFE) == 0x10 /* W83L771AWG/ASG */ 1254 + && reg_convrate <= 0x08) { 1255 + name = "w83l771"; 1256 + } 1244 1257 } 1245 1258 } 1246 1259