1Kernel driver vt1211 2==================== 3 4Supported chips: 5 * VIA VT1211 6 Prefix: 'vt1211' 7 Addresses scanned: none, address read from Super-I/O config space 8 Datasheet: Provided by VIA upon request and under NDA 9 10Authors: Juerg Haefliger <juergh@gmail.com> 11 12This driver is based on the driver for kernel 2.4 by Mark D. Studebaker and 13its port to kernel 2.6 by Lars Ekman. 14 15Thanks to Joseph Chan and Fiona Gatt from VIA for providing documentation and 16technical support. 17 18 19Module Parameters 20----------------- 21 22* uch_config: int Override the BIOS default universal channel (UCH) 23 configuration for channels 1-5. 24 Legal values are in the range of 0-31. Bit 0 maps to 25 UCH1, bit 1 maps to UCH2 and so on. Setting a bit to 1 26 enables the thermal input of that particular UCH and 27 setting a bit to 0 enables the voltage input. 28 29* int_mode: int Override the BIOS default temperature interrupt mode. 30 The only possible value is 0 which forces interrupt 31 mode 0. In this mode, any pending interrupt is cleared 32 when the status register is read but is regenerated as 33 long as the temperature stays above the hysteresis 34 limit. 35 36Be aware that overriding BIOS defaults might cause some unwanted side effects! 37 38 39Description 40----------- 41 42The VIA VT1211 Super-I/O chip includes complete hardware monitoring 43capabilities. It monitors 2 dedicated temperature sensor inputs (temp1 and 44temp2), 1 dedicated voltage (in5) and 2 fans. Additionally, the chip 45implements 5 universal input channels (UCH1-5) that can be individually 46programmed to either monitor a voltage or a temperature. 47 48This chip also provides manual and automatic control of fan speeds (according 49to the datasheet). The driver only supports automatic control since the manual 50mode doesn't seem to work as advertised in the datasheet. In fact I couldn't 51get manual mode to work at all! Be aware that automatic mode hasn't been 52tested very well (due to the fact that my EPIA M10000 doesn't have the fans 53connected to the PWM outputs of the VT1211 :-(). 54 55The following table shows the relationship between the vt1211 inputs and the 56sysfs nodes. 57 58Sensor Voltage Mode Temp Mode Default Use (from the datasheet) 59------ ------------ --------- -------------------------------- 60Reading 1 temp1 Intel thermal diode 61Reading 3 temp2 Internal thermal diode 62UCH1/Reading2 in0 temp3 NTC type thermistor 63UCH2 in1 temp4 +2.5V 64UCH3 in2 temp5 VccP (processor core) 65UCH4 in3 temp6 +5V 66UCH5 in4 temp7 +12V 67+3.3V in5 Internal VCC (+3.3V) 68 69 70Voltage Monitoring 71------------------ 72 73Voltages are sampled by an 8-bit ADC with a LSB of ~10mV. The supported input 74range is thus from 0 to 2.60V. Voltage values outside of this range need 75external scaling resistors. This external scaling needs to be compensated for 76via compute lines in sensors.conf, like: 77 78compute inx @*(1+R1/R2), @/(1+R1/R2) 79 80The board level scaling resistors according to VIA's recommendation are as 81follows. And this is of course totally dependent on the actual board 82implementation :-) You will have to find documentation for your own 83motherboard and edit sensors.conf accordingly. 84 85 Expected 86Voltage R1 R2 Divider Raw Value 87----------------------------------------------- 88+2.5V 2K 10K 1.2 2083 mV 89VccP --- --- 1.0 1400 mV (1) 90+5V 14K 10K 2.4 2083 mV 91+12V 47K 10K 5.7 2105 mV 92+3.3V (int) 2K 3.4K 1.588 3300 mV (2) 93+3.3V (ext) 6.8K 10K 1.68 1964 mV 94 95(1) Depending on the CPU (1.4V is for a VIA C3 Nehemiah). 96(2) R1 and R2 for 3.3V (int) are internal to the VT1211 chip and the driver 97 performs the scaling and returns the properly scaled voltage value. 98 99Each measured voltage has an associated low and high limit which triggers an 100alarm when crossed. 101 102 103Temperature Monitoring 104---------------------- 105 106Temperatures are reported in millidegree Celsius. Each measured temperature 107has a high limit which triggers an alarm if crossed. There is an associated 108hysteresis value with each temperature below which the temperature has to drop 109before the alarm is cleared (this is only true for interrupt mode 0). The 110interrupt mode can be forced to 0 in case the BIOS doesn't do it 111automatically. See the 'Module Parameters' section for details. 112 113All temperature channels except temp2 are external. Temp2 is the VT1211 114internal thermal diode and the driver does all the scaling for temp2 and 115returns the temperature in millidegree Celsius. For the external channels 116temp1 and temp3-temp7, scaling depends on the board implementation and needs 117to be performed in userspace via sensors.conf. 118 119Temp1 is an Intel-type thermal diode which requires the following formula to 120convert between sysfs readings and real temperatures: 121 122compute temp1 (@-Offset)/Gain, (@*Gain)+Offset 123 124According to the VIA VT1211 BIOS porting guide, the following gain and offset 125values should be used: 126 127Diode Type Offset Gain 128---------- ------ ---- 129Intel CPU 88.638 0.9528 130 65.000 0.9686 *) 131VIA C3 Ezra 83.869 0.9528 132VIA C3 Ezra-T 73.869 0.9528 133 134*) This is the formula from the lm_sensors 2.10.0 sensors.conf file. I don't 135know where it comes from or how it was derived, it's just listed here for 136completeness. 137 138Temp3-temp7 support NTC thermistors. For these channels, the driver returns 139the voltages as seen at the individual pins of UCH1-UCH5. The voltage at the 140pin (Vpin) is formed by a voltage divider made of the thermistor (Rth) and a 141scaling resistor (Rs): 142 143Vpin = 2200 * Rth / (Rs + Rth) (2200 is the ADC max limit of 2200 mV) 144 145The equation for the thermistor is as follows (google it if you want to know 146more about it): 147 148Rth = Ro * exp(B * (1 / T - 1 / To)) (To is 298.15K (25C) and Ro is the 149 nominal resistance at 25C) 150 151Mingling the above two equations and assuming Rs = Ro and B = 3435 yields the 152following formula for sensors.conf: 153 154compute tempx 1 / (1 / 298.15 - (` (2200 / @ - 1)) / 3435) - 273.15, 155 2200 / (1 + (^ (3435 / 298.15 - 3435 / (273.15 + @)))) 156 157 158Fan Speed Control 159----------------- 160 161The VT1211 provides 2 programmable PWM outputs to control the speeds of 2 162fans. Writing a 2 to any of the two pwm[1-2]_enable sysfs nodes will put the 163PWM controller in automatic mode. There is only a single controller that 164controls both PWM outputs but each PWM output can be individually enabled and 165disabled. 166 167Each PWM has 4 associated distinct output duty-cycles: full, high, low and 168off. Full and off are internally hard-wired to 255 (100%) and 0 (0%), 169respectively. High and low can be programmed via 170pwm[1-2]_auto_point[2-3]_pwm. Each PWM output can be associated with a 171different thermal input but - and here's the weird part - only one set of 172thermal thresholds exist that controls both PWMs output duty-cycles. The 173thermal thresholds are accessible via pwm[1-2]_auto_point[1-4]_temp. Note 174that even though there are 2 sets of 4 auto points each, they map to the same 175registers in the VT1211 and programming one set is sufficient (actually only 176the first set pwm1_auto_point[1-4]_temp is writable, the second set is 177read-only). 178 179PWM Auto Point PWM Output Duty-Cycle 180------------------------------------------------ 181pwm[1-2]_auto_point4_pwm full speed duty-cycle (hard-wired to 255) 182pwm[1-2]_auto_point3_pwm high speed duty-cycle 183pwm[1-2]_auto_point2_pwm low speed duty-cycle 184pwm[1-2]_auto_point1_pwm off duty-cycle (hard-wired to 0) 185 186Temp Auto Point Thermal Threshold 187--------------------------------------------- 188pwm[1-2]_auto_point4_temp full speed temp 189pwm[1-2]_auto_point3_temp high speed temp 190pwm[1-2]_auto_point2_temp low speed temp 191pwm[1-2]_auto_point1_temp off temp 192 193Long story short, the controller implements the following algorithm to set the 194PWM output duty-cycle based on the input temperature: 195 196Thermal Threshold Output Duty-Cycle 197 (Rising Temp) (Falling Temp) 198---------------------------------------------------------- 199 full speed duty-cycle full speed duty-cycle 200full speed temp 201 high speed duty-cycle full speed duty-cycle 202high speed temp 203 low speed duty-cycle high speed duty-cycle 204low speed temp 205 off duty-cycle low speed duty-cycle 206off temp 207