|
@@ -0,0 +1,412 @@
|
|
|
+Kernel driver w83781d
|
|
|
+=====================
|
|
|
+
|
|
|
+Supported chips:
|
|
|
+ * Winbond W83781D
|
|
|
+ Prefix: 'w83781d'
|
|
|
+ Addresses scanned: I2C 0x20 - 0x2f, ISA 0x290 (8 I/O ports)
|
|
|
+ Datasheet: http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/w83781d.pdf
|
|
|
+ * Winbond W83782D
|
|
|
+ Prefix: 'w83782d'
|
|
|
+ Addresses scanned: I2C 0x20 - 0x2f, ISA 0x290 (8 I/O ports)
|
|
|
+ Datasheet: http://www.winbond.com/PDF/sheet/w83782d.pdf
|
|
|
+ * Winbond W83783S
|
|
|
+ Prefix: 'w83783s'
|
|
|
+ Addresses scanned: I2C 0x2d
|
|
|
+ Datasheet: http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/w83783s.pdf
|
|
|
+ * Winbond W83627HF
|
|
|
+ Prefix: 'w83627hf'
|
|
|
+ Addresses scanned: I2C 0x20 - 0x2f, ISA 0x290 (8 I/O ports)
|
|
|
+ Datasheet: http://www.winbond.com/PDF/sheet/w83627hf.pdf
|
|
|
+ * Winbond W83627THF
|
|
|
+ Prefix: 'w83627thf'
|
|
|
+ Addresses scanned: ISA address 0x290 (8 I/O ports)
|
|
|
+ Datasheet: http://www.winbond.com/PDF/sheet/w83627thf.pdf
|
|
|
+ * Winbond W83697HF
|
|
|
+ Prefix: 'w83697hf'
|
|
|
+ Addresses scanned: ISA 0x290 (8 I/O ports)
|
|
|
+ Datasheet: http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/w83697hf.pdf
|
|
|
+ * Asus AS99127F
|
|
|
+ Prefix: 'as99127f'
|
|
|
+ Addresses scanned: I2C 0x28 - 0x2f
|
|
|
+ Datasheet: Unavailable from Asus
|
|
|
+
|
|
|
+Authors:
|
|
|
+ Frodo Looijaard <frodol@dds.nl>,
|
|
|
+ Philip Edelbrock <phil@netroedge.com>,
|
|
|
+ Mark Studebaker <mdsxyz123@yahoo.com>
|
|
|
+
|
|
|
+Module parameters
|
|
|
+-----------------
|
|
|
+
|
|
|
+* init int
|
|
|
+ (default 1)
|
|
|
+ Use 'init=0' to bypass initializing the chip.
|
|
|
+ Try this if your computer crashes when you load the module.
|
|
|
+
|
|
|
+force_subclients=bus,caddr,saddr,saddr
|
|
|
+ This is used to force the i2c addresses for subclients of
|
|
|
+ a certain chip. Typical usage is `force_subclients=0,0x2d,0x4a,0x4b'
|
|
|
+ to force the subclients of chip 0x2d on bus 0 to i2c addresses
|
|
|
+ 0x4a and 0x4b. This parameter is useful for certain Tyan boards.
|
|
|
+
|
|
|
+Description
|
|
|
+-----------
|
|
|
+
|
|
|
+This driver implements support for the Winbond W83627HF, W83627THF, W83781D,
|
|
|
+W83782D, W83783S, W83697HF chips, and the Asus AS99127F 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 Asus chips are similar to an I2C-only W83782D.
|
|
|
+
|
|
|
+Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA
|
|
|
+as99127f 7 3 0 3 0x31 0x12c3 yes no
|
|
|
+as99127f rev.2 (type_name = as99127f) 0x31 0x5ca3 yes no
|
|
|
+w83781d 7 3 0 3 0x10-1 0x5ca3 yes yes
|
|
|
+w83627hf 9 3 2 3 0x21 0x5ca3 yes yes(LPC)
|
|
|
+w83627thf 9 3 2 3 0x90 0x5ca3 no yes(LPC)
|
|
|
+w83782d 9 3 2-4 3 0x30 0x5ca3 yes yes
|
|
|
+w83783s 5-6 3 2 1-2 0x40 0x5ca3 yes no
|
|
|
+w83697hf 8 2 2 2 0x60 0x5ca3 no yes(LPC)
|
|
|
+
|
|
|
+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
|
|
|
+of the chip, use a 'force' parameter; this will put them into a more
|
|
|
+well-behaved state first.
|
|
|
+
|
|
|
+The W8378* implements temperature sensors (three on the W83781D and W83782D,
|
|
|
+two on the W83783S), three fan rotation speed sensors, voltage sensors
|
|
|
+(seven on the W83781D, nine on the W83782D and six on the W83783S), VID
|
|
|
+lines, alarms with beep warnings, and some miscellaneous stuff.
|
|
|
+
|
|
|
+Temperatures are measured in degrees Celsius. There is always one main
|
|
|
+temperature sensor, and one (W83783S) or two (W83781D and W83782D) other
|
|
|
+sensors. An alarm is triggered for the main sensor once when the
|
|
|
+Overtemperature Shutdown limit is crossed; it is triggered again as soon as
|
|
|
+it drops below the Hysteresis value. A more useful behavior
|
|
|
+can be found by setting the Hysteresis value to +127 degrees Celsius; in
|
|
|
+this case, alarms are issued during all the time when the actual temperature
|
|
|
+is above the Overtemperature Shutdown value. The driver sets the
|
|
|
+hysteresis value for temp1 to 127 at initialization.
|
|
|
+
|
|
|
+For the other temperature sensor(s), an alarm is triggered when the
|
|
|
+temperature gets higher then the Overtemperature Shutdown value; it stays
|
|
|
+on until the temperature falls below the Hysteresis value. But on the
|
|
|
+W83781D, there is only one alarm that functions for both other sensors!
|
|
|
+Temperatures are guaranteed within a range of -55 to +125 degrees. The
|
|
|
+main temperature sensors has a resolution of 1 degree; the other sensor(s)
|
|
|
+of 0.5 degree.
|
|
|
+
|
|
|
+Fan rotation speeds are reported in RPM (rotations per minute). An alarm is
|
|
|
+triggered if the rotation speed has dropped below a programmable limit. Fan
|
|
|
+readings can be divided by a programmable divider (1, 2, 4 or 8 for the
|
|
|
+W83781D; 1, 2, 4, 8, 16, 32, 64 or 128 for the others) to give
|
|
|
+the readings more range or accuracy. Not all RPM values can accurately
|
|
|
+be represented, so some rounding is done. With a divider of 2, the lowest
|
|
|
+representable value is around 2600 RPM.
|
|
|
+
|
|
|
+Voltage sensors (also known as IN sensors) report their values in volts.
|
|
|
+An alarm is triggered if the voltage has crossed a programmable minimum
|
|
|
+or maximum limit. Note that minimum in this case always means 'closest to
|
|
|
+zero'; this is important for negative voltage measurements. All voltage
|
|
|
+inputs can measure voltages between 0 and 4.08 volts, with a resolution
|
|
|
+of 0.016 volt.
|
|
|
+
|
|
|
+The VID lines encode the core voltage value: the voltage level your processor
|
|
|
+should work with. This is hardcoded by the mainboard and/or processor itself.
|
|
|
+It is a value in volts. When it is unconnected, you will often find the
|
|
|
+value 3.50 V here.
|
|
|
+
|
|
|
+The W83782D and W83783S temperature conversion machine understands about
|
|
|
+several kinds of temperature probes. You can program the so-called
|
|
|
+beta value in the sensor files. '1' is the PII/Celeron diode, '2' is the
|
|
|
+TN3904 transistor, and 3435 the default thermistor value. Other values
|
|
|
+are (not yet) supported.
|
|
|
+
|
|
|
+In addition to the alarms described above, there is a CHAS alarm on the
|
|
|
+chips which triggers if your computer case is open.
|
|
|
+
|
|
|
+When an alarm goes off, you can be warned by a beeping signal through
|
|
|
+your computer speaker. It is possible to enable all beeping globally,
|
|
|
+or only the beeping for some alarms.
|
|
|
+
|
|
|
+If an alarm triggers, it will remain triggered until the hardware register
|
|
|
+is read at least once. This means that the cause for the alarm may
|
|
|
+already have disappeared! Note that in the current implementation, all
|
|
|
+hardware registers are read whenever any data is read (unless it is less
|
|
|
+than 1.5 seconds since the last update). This means that you can easily
|
|
|
+miss once-only alarms.
|
|
|
+
|
|
|
+The chips only update values each 1.5 seconds; reading them more often
|
|
|
+will do no harm, but will return 'old' values.
|
|
|
+
|
|
|
+AS99127F PROBLEMS
|
|
|
+-----------------
|
|
|
+The as99127f support was developed without the benefit of a datasheet.
|
|
|
+In most cases it is treated as a w83781d (although revision 2 of the
|
|
|
+AS99127F looks more like a w83782d).
|
|
|
+This support will be BETA until a datasheet is released.
|
|
|
+One user has reported problems with fans stopping
|
|
|
+occasionally.
|
|
|
+
|
|
|
+Note that the individual beep bits are inverted from the other chips.
|
|
|
+The driver now takes care of this so that user-space applications
|
|
|
+don't have to know about it.
|
|
|
+
|
|
|
+Known problems:
|
|
|
+ - Problems with diode/thermistor settings (supported?)
|
|
|
+ - One user reports fans stopping under high server load.
|
|
|
+ - Revision 2 seems to have 2 PWM registers but we don't know
|
|
|
+ how to handle them. More details below.
|
|
|
+
|
|
|
+These will not be fixed unless we get a datasheet.
|
|
|
+If you have problems, please lobby Asus to release a datasheet.
|
|
|
+Unfortunately several others have without success.
|
|
|
+Please do not send mail to us asking for better as99127f support.
|
|
|
+We have done the best we can without a datasheet.
|
|
|
+Please do not send mail to the author or the sensors group asking for
|
|
|
+a datasheet or ideas on how to convince Asus. We can't help.
|
|
|
+
|
|
|
+
|
|
|
+NOTES:
|
|
|
+-----
|
|
|
+ 783s has no in1 so that in[2-6] are compatible with the 781d/782d.
|
|
|
+
|
|
|
+ 783s pin is programmable for -5V or temp1; defaults to -5V,
|
|
|
+ no control in driver so temp1 doesn't work.
|
|
|
+
|
|
|
+ 782d and 783s datasheets differ on which is pwm1 and which is pwm2.
|
|
|
+ We chose to follow 782d.
|
|
|
+
|
|
|
+ 782d and 783s pin is programmable for fan3 input or pwm2 output;
|
|
|
+ defaults to fan3 input.
|
|
|
+ If pwm2 is enabled (with echo 255 1 > pwm2), then
|
|
|
+ fan3 will report 0.
|
|
|
+
|
|
|
+ 782d has pwm1-2 for ISA, pwm1-4 for i2c. (pwm3-4 share pins with
|
|
|
+ the ISA pins)
|
|
|
+
|
|
|
+Data sheet updates:
|
|
|
+------------------
|
|
|
+ - PWM clock registers:
|
|
|
+
|
|
|
+ 000: master / 512
|
|
|
+ 001: master / 1024
|
|
|
+ 010: master / 2048
|
|
|
+ 011: master / 4096
|
|
|
+ 100: master / 8192
|
|
|
+
|
|
|
+
|
|
|
+Answers from Winbond tech support
|
|
|
+---------------------------------
|
|
|
+>
|
|
|
+> 1) In the W83781D data sheet section 7.2 last paragraph, it talks about
|
|
|
+> reprogramming the R-T table if the Beta of the thermistor is not
|
|
|
+> 3435K. The R-T table is described briefly in section 8.20.
|
|
|
+> What formulas do I use to program a new R-T table for a given Beta?
|
|
|
+>
|
|
|
+ We are sorry that the calculation for R-T table value is
|
|
|
+confidential. If you have another Beta value of thermistor, we can help
|
|
|
+to calculate the R-T table for you. But you should give us real R-T
|
|
|
+Table which can be gotten by thermistor vendor. Therefore we will calculate
|
|
|
+them and obtain 32-byte data, and you can fill the 32-byte data to the
|
|
|
+register in Bank0.CR51 of W83781D.
|
|
|
+
|
|
|
+
|
|
|
+> 2) In the W83782D data sheet, it mentions that pins 38, 39, and 40 are
|
|
|
+> programmable to be either thermistor or Pentium II diode inputs.
|
|
|
+> How do I program them for diode inputs? I can't find any register
|
|
|
+> to program these to be diode inputs.
|
|
|
+ --> You may program Bank0 CR[5Dh] and CR[59h] registers.
|
|
|
+
|
|
|
+ CR[5Dh] bit 1(VTIN1) bit 2(VTIN2) bit 3(VTIN3)
|
|
|
+
|
|
|
+ thermistor 0 0 0
|
|
|
+ diode 1 1 1
|
|
|
+
|
|
|
+
|
|
|
+(error) CR[59h] bit 4(VTIN1) bit 2(VTIN2) bit 3(VTIN3)
|
|
|
+(right) CR[59h] bit 4(VTIN1) bit 5(VTIN2) bit 6(VTIN3)
|
|
|
+
|
|
|
+ PII thermal diode 1 1 1
|
|
|
+ 2N3904 diode 0 0 0
|
|
|
+
|
|
|
+
|
|
|
+Asus Clones
|
|
|
+-----------
|
|
|
+
|
|
|
+We have no datasheets for the Asus clones (AS99127F and ASB100 Bach).
|
|
|
+Here are some very useful information that were given to us by Alex Van
|
|
|
+Kaam about how to detect these chips, and how to read their values. He
|
|
|
+also gives advice for another Asus chipset, the Mozart-2 (which we
|
|
|
+don't support yet). Thanks Alex!
|
|
|
+I reworded some parts and added personal comments.
|
|
|
+
|
|
|
+# Detection:
|
|
|
+
|
|
|
+AS99127F rev.1, AS99127F rev.2 and ASB100:
|
|
|
+- I2C address range: 0x29 - 0x2F
|
|
|
+- If register 0x58 holds 0x31 then we have an Asus (either ASB100 or
|
|
|
+ AS99127F)
|
|
|
+- Which one depends on register 0x4F (manufacturer ID):
|
|
|
+ 0x06 or 0x94: ASB100
|
|
|
+ 0x12 or 0xC3: AS99127F rev.1
|
|
|
+ 0x5C or 0xA3: AS99127F rev.2
|
|
|
+ Note that 0x5CA3 is Winbond's ID (WEC), which let us think Asus get their
|
|
|
+ AS99127F rev.2 direct from Winbond. The other codes mean ATT and DVC,
|
|
|
+ respectively. ATT could stand for Asustek something (although it would be
|
|
|
+ very badly chosen IMHO), I don't know what DVC could stand for. Maybe
|
|
|
+ these codes simply aren't meant to be decoded that way.
|
|
|
+
|
|
|
+Mozart-2:
|
|
|
+- I2C address: 0x77
|
|
|
+- If register 0x58 holds 0x56 or 0x10 then we have a Mozart-2
|
|
|
+- Of the Mozart there are 3 types:
|
|
|
+ 0x58=0x56, 0x4E=0x94, 0x4F=0x36: Asus ASM58 Mozart-2
|
|
|
+ 0x58=0x56, 0x4E=0x94, 0x4F=0x06: Asus AS2K129R Mozart-2
|
|
|
+ 0x58=0x10, 0x4E=0x5C, 0x4F=0xA3: Asus ??? Mozart-2
|
|
|
+ You can handle all 3 the exact same way :)
|
|
|
+
|
|
|
+# Temperature sensors:
|
|
|
+
|
|
|
+ASB100:
|
|
|
+- sensor 1: register 0x27
|
|
|
+- sensor 2 & 3 are the 2 LM75's on the SMBus
|
|
|
+- sensor 4: register 0x17
|
|
|
+Remark: I noticed that on Intel boards sensor 2 is used for the CPU
|
|
|
+ and 4 is ignored/stuck, on AMD boards sensor 4 is the CPU and sensor 2 is
|
|
|
+ either ignored or a socket temperature.
|
|
|
+
|
|
|
+AS99127F (rev.1 and 2 alike):
|
|
|
+- sensor 1: register 0x27
|
|
|
+- sensor 2 & 3 are the 2 LM75's on the SMBus
|
|
|
+Remark: Register 0x5b is suspected to be temperature type selector. Bit 1
|
|
|
+ would control temp1, bit 3 temp2 and bit 5 temp3.
|
|
|
+
|
|
|
+Mozart-2:
|
|
|
+- sensor 1: register 0x27
|
|
|
+- sensor 2: register 0x13
|
|
|
+
|
|
|
+# Fan sensors:
|
|
|
+
|
|
|
+ASB100, AS99127F (rev.1 and 2 alike):
|
|
|
+- 3 fans, identical to the W83781D
|
|
|
+
|
|
|
+Mozart-2:
|
|
|
+- 2 fans only, 1350000/RPM/div
|
|
|
+- fan 1: register 0x28, divisor on register 0xA1 (bits 4-5)
|
|
|
+- fan 2: register 0x29, divisor on register 0xA1 (bits 6-7)
|
|
|
+
|
|
|
+# Voltages:
|
|
|
+
|
|
|
+This is where there is a difference between AS99127F rev.1 and 2.
|
|
|
+Remark: The difference is similar to the difference between
|
|
|
+ W83781D and W83782D.
|
|
|
+
|
|
|
+ASB100:
|
|
|
+in0=r(0x20)*0.016
|
|
|
+in1=r(0x21)*0.016
|
|
|
+in2=r(0x22)*0.016
|
|
|
+in3=r(0x23)*0.016*1.68
|
|
|
+in4=r(0x24)*0.016*3.8
|
|
|
+in5=r(0x25)*(-0.016)*3.97
|
|
|
+in6=r(0x26)*(-0.016)*1.666
|
|
|
+
|
|
|
+AS99127F rev.1:
|
|
|
+in0=r(0x20)*0.016
|
|
|
+in1=r(0x21)*0.016
|
|
|
+in2=r(0x22)*0.016
|
|
|
+in3=r(0x23)*0.016*1.68
|
|
|
+in4=r(0x24)*0.016*3.8
|
|
|
+in5=r(0x25)*(-0.016)*3.97
|
|
|
+in6=r(0x26)*(-0.016)*1.503
|
|
|
+
|
|
|
+AS99127F rev.2:
|
|
|
+in0=r(0x20)*0.016
|
|
|
+in1=r(0x21)*0.016
|
|
|
+in2=r(0x22)*0.016
|
|
|
+in3=r(0x23)*0.016*1.68
|
|
|
+in4=r(0x24)*0.016*3.8
|
|
|
+in5=(r(0x25)*0.016-3.6)*5.14+3.6
|
|
|
+in6=(r(0x26)*0.016-3.6)*3.14+3.6
|
|
|
+
|
|
|
+Mozart-2:
|
|
|
+in0=r(0x20)*0.016
|
|
|
+in1=255
|
|
|
+in2=r(0x22)*0.016
|
|
|
+in3=r(0x23)*0.016*1.68
|
|
|
+in4=r(0x24)*0.016*4
|
|
|
+in5=255
|
|
|
+in6=255
|
|
|
+
|
|
|
+
|
|
|
+# PWM
|
|
|
+
|
|
|
+Additional info about PWM on the AS99127F (may apply to other Asus
|
|
|
+chips as well) by Jean Delvare as of 2004-04-09:
|
|
|
+
|
|
|
+AS99127F revision 2 seems to have two PWM registers at 0x59 and 0x5A,
|
|
|
+and a temperature sensor type selector at 0x5B (which basically means
|
|
|
+that they swapped registers 0x59 and 0x5B when you compare with Winbond
|
|
|
+chips).
|
|
|
+Revision 1 of the chip also has the temperature sensor type selector at
|
|
|
+0x5B, but PWM registers have no effect.
|
|
|
+
|
|
|
+We don't know exactly how the temperature sensor type selection works.
|
|
|
+Looks like bits 1-0 are for temp1, bits 3-2 for temp2 and bits 5-4 for
|
|
|
+temp3, although it is possible that only the most significant bit matters
|
|
|
+each time. So far, values other than 0 always broke the readings.
|
|
|
+
|
|
|
+PWM registers seem to be split in two parts: bit 7 is a mode selector,
|
|
|
+while the other bits seem to define a value or threshold.
|
|
|
+
|
|
|
+When bit 7 is clear, bits 6-0 seem to hold a threshold value. If the value
|
|
|
+is below a given limit, the fan runs at low speed. If the value is above
|
|
|
+the limit, the fan runs at full speed. We have no clue as to what the limit
|
|
|
+represents. Note that there seem to be some inertia in this mode, speed
|
|
|
+changes may need some time to trigger. Also, an hysteresis mechanism is
|
|
|
+suspected since walking through all the values increasingly and then
|
|
|
+decreasingly led to slightly different limits.
|
|
|
+
|
|
|
+When bit 7 is set, bits 3-0 seem to hold a threshold value, while bits 6-4
|
|
|
+would not be significant. If the value is below a given limit, the fan runs
|
|
|
+at full speed, while if it is above the limit it runs at low speed (so this
|
|
|
+is the contrary of the other mode, in a way). Here again, we don't know
|
|
|
+what the limit is supposed to represent.
|
|
|
+
|
|
|
+One remarkable thing is that the fans would only have two or three
|
|
|
+different speeds (transitional states left apart), not a whole range as
|
|
|
+you usually get with PWM.
|
|
|
+
|
|
|
+As a conclusion, you can write 0x00 or 0x8F to the PWM registers to make
|
|
|
+fans run at low speed, and 0x7F or 0x80 to make them run at full speed.
|
|
|
+
|
|
|
+Please contact us if you can figure out how it is supposed to work. As
|
|
|
+long as we don't know more, the w83781d driver doesn't handle PWM on
|
|
|
+AS99127F chips at all.
|
|
|
+
|
|
|
+Additional info about PWM on the AS99127F rev.1 by Hector Martin:
|
|
|
+
|
|
|
+I've been fiddling around with the (in)famous 0x59 register and
|
|
|
+found out the following values do work as a form of coarse pwm:
|
|
|
+
|
|
|
+0x80 - seems to turn fans off after some time(1-2 minutes)... might be
|
|
|
+some form of auto-fan-control based on temp? hmm (Qfan? this mobo is an
|
|
|
+old ASUS, it isn't marketed as Qfan. Maybe some beta pre-attemp at Qfan
|
|
|
+that was dropped at the BIOS)
|
|
|
+0x81 - off
|
|
|
+0x82 - slightly "on-ner" than off, but my fans do not get to move. I can
|
|
|
+hear the high-pitched PWM sound that motors give off at too-low-pwm.
|
|
|
+0x83 - now they do move. Estimate about 70% speed or so.
|
|
|
+0x84-0x8f - full on
|
|
|
+
|
|
|
+Changing the high nibble doesn't seem to do much except the high bit
|
|
|
+(0x80) must be set for PWM to work, else the current pwm doesn't seem to
|
|
|
+change.
|
|
|
+
|
|
|
+My mobo is an ASUS A7V266-E. This behavior is similar to what I got
|
|
|
+with speedfan under Windows, where 0-15% would be off, 15-2x% (can't
|
|
|
+remember the exact value) would be 70% and higher would be full on.
|