7 Addresses scanned: none, address read from Super-I/O config space
8 Datasheet: Provided by VIA upon request and under NDA
10 Authors: Juerg Haefliger <juergh@gmail.com>
12 This driver is based on the driver for kernel 2.4 by Mark D. Studebaker and
13 its port to kernel 2.6 by Lars Ekman.
15 Thanks to Joseph Chan and Fiona Gatt from VIA for providing documentation and
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.
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
36 Be aware that overriding BIOS defaults might cause some unwanted side effects!
42 The VIA VT1211 Super-I/O chip includes complete hardware monitoring
43 capabilities. It monitors 2 dedicated temperature sensor inputs (temp1 and
44 temp2), 1 dedicated voltage (in5) and 2 fans. Additionally, the chip
45 implements 5 universal input channels (UCH1-5) that can be individually
46 programmed to either monitor a voltage or a temperature.
48 This chip also provides manual and automatic control of fan speeds (according
49 to the datasheet). The driver only supports automatic control since the manual
50 mode doesn't seem to work as advertised in the datasheet. In fact I couldn't
51 get manual mode to work at all! Be aware that automatic mode hasn't been
52 tested very well (due to the fact that my EPIA M10000 doesn't have the fans
53 connected to the PWM outputs of the VT1211 :-().
55 The following table shows the relationship between the vt1211 inputs and the
58 Sensor Voltage Mode Temp Mode Default Use (from the datasheet)
59 ------ ------------ --------- --------------------------------
60 Reading 1 temp1 Intel thermal diode
61 Reading 3 temp2 Internal thermal diode
62 UCH1/Reading2 in0 temp3 NTC type thermistor
64 UCH3 in2 temp5 VccP (processor core)
67 +3.3V in5 Internal VCC (+3.3V)
73 Voltages are sampled by an 8-bit ADC with a LSB of ~10mV. The supported input
74 range is thus from 0 to 2.60V. Voltage values outside of this range need
75 external scaling resistors. This external scaling needs to be compensated for
76 via compute lines in sensors.conf, like:
78 compute inx @*(1+R1/R2), @/(1+R1/R2)
80 The board level scaling resistors according to VIA's recommendation are as
81 follows. And this is of course totally dependent on the actual board
82 implementation :-) You will have to find documentation for your own
83 motherboard and edit sensors.conf accordingly.
86 Voltage R1 R2 Divider Raw Value
87 -----------------------------------------------
88 +2.5V 2K 10K 1.2 2083 mV
89 VccP --- --- 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
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.
99 Each measured voltage has an associated low and high limit which triggers an
103 Temperature Monitoring
104 ----------------------
106 Temperatures are reported in millidegree Celsius. Each measured temperature
107 has a high limit which triggers an alarm if crossed. There is an associated
108 hysteresis value with each temperature below which the temperature has to drop
109 before the alarm is cleared (this is only true for interrupt mode 0). The
110 interrupt mode can be forced to 0 in case the BIOS doesn't do it
111 automatically. See the 'Module Parameters' section for details.
113 All temperature channels except temp2 are external. Temp2 is the VT1211
114 internal thermal diode and the driver does all the scaling for temp2 and
115 returns the temperature in millidegree Celsius. For the external channels
116 temp1 and temp3-temp7, scaling depends on the board implementation and needs
117 to be performed in userspace via sensors.conf.
119 Temp1 is an Intel-type thermal diode which requires the following formula to
120 convert between sysfs readings and real temperatures:
122 compute temp1 (@-Offset)/Gain, (@*Gain)+Offset
124 According to the VIA VT1211 BIOS porting guide, the following gain and offset
125 values should be used:
127 Diode Type Offset Gain
128 ---------- ------ ----
129 Intel CPU 88.638 0.9528
131 VIA C3 Ezra 83.869 0.9528
132 VIA C3 Ezra-T 73.869 0.9528
134 *) This is the formula from the lm_sensors 2.10.0 sensors.conf file. I don't
135 know where it comes from or how it was derived, it's just listed here for
138 Temp3-temp7 support NTC thermistors. For these channels, the driver returns
139 the voltages as seen at the individual pins of UCH1-UCH5. The voltage at the
140 pin (Vpin) is formed by a voltage divider made of the thermistor (Rth) and a
141 scaling resistor (Rs):
143 Vpin = 2200 * Rth / (Rs + Rth) (2200 is the ADC max limit of 2200 mV)
145 The equation for the thermistor is as follows (google it if you want to know
148 Rth = Ro * exp(B * (1 / T - 1 / To)) (To is 298.15K (25C) and Ro is the
149 nominal resistance at 25C)
151 Mingling the above two equations and assuming Rs = Ro and B = 3435 yields the
152 following formula for sensors.conf:
154 compute tempx 1 / (1 / 298.15 - (` (2200 / @ - 1)) / 3435) - 273.15,
155 2200 / (1 + (^ (3435 / 298.15 - 3435 / (273.15 + @))))
161 The VT1211 provides 2 programmable PWM outputs to control the speeds of 2
162 fans. Writing a 2 to any of the two pwm[1-2]_enable sysfs nodes will put the
163 PWM controller in automatic mode. There is only a single controller that
164 controls both PWM outputs but each PWM output can be individually enabled and
167 Each PWM has 4 associated distinct output duty-cycles: full, high, low and
168 off. Full and off are internally hard-wired to 255 (100%) and 0 (0%),
169 respectively. High and low can be programmed via
170 pwm[1-2]_auto_point[2-3]_pwm. Each PWM output can be associated with a
171 different thermal input but - and here's the weird part - only one set of
172 thermal thresholds exist that controls both PWMs output duty-cycles. The
173 thermal thresholds are accessible via pwm[1-2]_auto_point[1-4]_temp. Note
174 that even though there are 2 sets of 4 auto points each, they map to the same
175 registers in the VT1211 and programming one set is sufficient (actually only
176 the first set pwm1_auto_point[1-4]_temp is writable, the second set is
179 PWM Auto Point PWM Output Duty-Cycle
180 ------------------------------------------------
181 pwm[1-2]_auto_point4_pwm full speed duty-cycle (hard-wired to 255)
182 pwm[1-2]_auto_point3_pwm high speed duty-cycle
183 pwm[1-2]_auto_point2_pwm low speed duty-cycle
184 pwm[1-2]_auto_point1_pwm off duty-cycle (hard-wired to 0)
186 Temp Auto Point Thermal Threshold
187 ---------------------------------------------
188 pwm[1-2]_auto_point4_temp full speed temp
189 pwm[1-2]_auto_point3_temp high speed temp
190 pwm[1-2]_auto_point2_temp low speed temp
191 pwm[1-2]_auto_point1_temp off temp
193 Long story short, the controller implements the following algorithm to set the
194 PWM output duty-cycle based on the input temperature:
196 Thermal Threshold Output Duty-Cycle
197 (Rising Temp) (Falling Temp)
198 ----------------------------------------------------------
199 full speed duty-cycle full speed duty-cycle
201 high speed duty-cycle full speed duty-cycle
203 low speed duty-cycle high speed duty-cycle
205 off duty-cycle low speed duty-cycle