diff --git a/CHANGES b/CHANGES index b11f1591..75c17a90 100644 --- a/CHANGES +++ b/CHANGES @@ -22,16 +22,18 @@ ask CVS about it: Module dmi_scan: new Module i2c-piix4: Refuse to load on IBM systems Module lm92: Fix in-kernel initialization + Module w83781: recognize Asus "ASB100 Bach" as AS99127F Program dmidecode: new Programs i2cdetect, i2cdump, i2cset, isadump: Now installed by 'make install' Program mkpatch: Add Config.in entries for, lm92, pcf8574, pcf8591, smsc47m1, vt1211; add dmi_scan - Program sensors: Add /usr/local/etc to config file path Program sensord: Add /usr/local/etc to config file path; add support for logging loadavg in RRD; fix down-converting raw labels for RRD; update chip support, still behind sensors + Program sensors: Add /usr/local/etc to config file path + Program sensors-detect: recognize Asus "ASB100 Bach" as AS99127F 2.6.4 (20020719) NOTE: Requires i2c-2.6.1 or newer, or kernel 2.4.13 or newer. diff --git a/doc/chips/w83781d b/doc/chips/w83781d index 6563b11c..78147e90 100644 --- a/doc/chips/w83781d +++ b/doc/chips/w83781d @@ -8,6 +8,8 @@ Status: W83781D support is complete and well-tested. W83697HF support is complete but has not been well-tested. AS99127F support is BETA and has known problems due to lack of a chip datasheet. SEE BELOW. + ASB100 Bach support is BETA; presently this chip is treated + exactly like AS99127F. Supported chips: * Winbond W83781D @@ -34,6 +36,11 @@ Supported chips: Prefix 'as99127f' Addresses scanned: I2C 0x20 - 0x2f (inclusive) Datasheet: Unavailable from Asus + * Asus ASB100 Bach + Prefix 'as99127f' + Addresses scanned: I2C 0x20 - 0x2f (inclusive) + Datasheet: Unavailable from Asus + Authors: Frodo Looijaard , Philip Edelbrock , @@ -81,13 +88,13 @@ Description ----------- This driver implements support for the Winbond W83781D, W83782D, -W8783S, and W83627HF chips, and the Asus AS99127F. +W8783S, and W83627HF chips, and the Asus AS99127F/ASB100 chips. We will refer to them collectively as W8378* chips. There is quite some difference between these chips, but they are similar enough that it was sensible to put them together in one driver. The W83627HF chip is assumed to be identical to the ISA W83782D. -The AS99127F chip is similar to an I2C-only W83782D. +The Asus chips are similar to an I2C-only W83782D. Detection of these chips can sometimes be foiled because they can be in an internal state that allows no clean access. If you know the address @@ -177,9 +184,9 @@ Known problems: cat /proc/bus/i2c to see a list of bus numbers) -AS99127F PROBLEMS +AS99127F/ASB100 PROBLEMS ----------------- -The as99127f support was developed without the benefit of a datasheet. +The as99127f/asb100 support was developed without the benefit of a datasheet. In most cases it is treated as a w83781d. This support will be BETA until a datasheet is released. One user has reported problems with fans stopping diff --git a/kernel/chips/w83781d.c b/kernel/chips/w83781d.c index a084f4a9..951dddd8 100644 --- a/kernel/chips/w83781d.c +++ b/kernel/chips/w83781d.c @@ -24,7 +24,8 @@ Supports following chips: Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA - as99127f 7 3 1? 3 0x20 0x12c3 yes no + as99127f 7 3 1? 3 0x30 0x12c3 yes no + asb100 "bach" (type_name = as99127f) 0x30 0x0694 yes no w83781d 7 3 0 3 0x10 0x5ca3 yes yes w83627hf 9 3 2 3 0x20 0x5ca3 yes yes(LPC) w83782d 9 3 2-4 3 0x30 0x5ca3 yes yes @@ -840,9 +841,10 @@ int w83781d_detect(struct i2c_adapter *adapter, int address, val2 = w83781d_read_value(new_client, W83781D_REG_CHIPMAN); /* Check for Winbond or Asus ID if in bank 0 */ if ((!(val1 & 0x07)) && - (((!(val1 & 0x80)) && (val2 != 0xa3) && (val2 != 0xc3)) - || ((val1 & 0x80) && (val2 != 0x5c) - && (val2 != 0x12)))) goto ERROR1; + (((!(val1 & 0x80)) && (val2 != 0xa3) && (val2 != 0xc3) + && (val2 != 0x94)) + || ((val1 & 0x80) && (val2 != 0x5c) && (val2 != 0x12) + && (val2 != 0x06)))) goto ERROR1; /* If Winbond SMBus, check address at 0x48. Asus doesn't support */ if ((!is_isa) && (((!(val1 & 0x80)) && (val2 == 0xa3)) || ((val1 & 0x80) && (val2 == 0x5c)))) { @@ -865,7 +867,7 @@ int w83781d_detect(struct i2c_adapter *adapter, int address, val2 = w83781d_read_value(new_client, W83781D_REG_CHIPMAN); if (val2 == 0x5c) vendid = winbond; - else if (val2 == 0x12) + else if ((val2 == 0x12) || (val2 == 0x06)) vendid = asus; else goto ERROR1; diff --git a/prog/detect/sensors-detect b/prog/detect/sensors-detect index 962e4071..8bd48dd3 100755 --- a/prog/detect/sensors-detect +++ b/prog/detect/sensors-detect @@ -2023,8 +2023,10 @@ sub w83781d_detect (($reg1 & 0x80) == 0x80 and $reg2 == 0x5c); } if ($chip == 4) { - return unless (($reg1 & 0x80) == 0x00 and $reg2 == 0xc3) or - (($reg1 & 0x80) == 0x80 and $reg2 == 0x12); + return unless (($reg1 & 0x80) == 0x00 and + ($reg2 == 0xc3 or $reg2 == 0x94)) or + (($reg1 & 0x80) == 0x80 and + ($reg2 == 0x12 or $reg2 == 0x06)); } return unless ($reg1 & 0x07) == 0x00; $reg1 = i2c_smbus_read_byte_data($file,0x58) & 0xfe;