Back to home page

OSCL-LXR

 
 

    


0001 Kernel driver vt1211
0002 ====================
0003 
0004 Supported chips:
0005 
0006   * VIA VT1211
0007 
0008     Prefix: 'vt1211'
0009 
0010     Addresses scanned: none, address read from Super-I/O config space
0011 
0012     Datasheet: Provided by VIA upon request and under NDA
0013 
0014 Authors: Juerg Haefliger <juergh@gmail.com>
0015 
0016 This driver is based on the driver for kernel 2.4 by Mark D. Studebaker and
0017 its port to kernel 2.6 by Lars Ekman.
0018 
0019 Thanks to Joseph Chan and Fiona Gatt from VIA for providing documentation and
0020 technical support.
0021 
0022 
0023 Module Parameters
0024 -----------------
0025 
0026 
0027 * uch_config: int
0028                         Override the BIOS default universal channel (UCH)
0029                         configuration for channels 1-5.
0030                         Legal values are in the range of 0-31. Bit 0 maps to
0031                         UCH1, bit 1 maps to UCH2 and so on. Setting a bit to 1
0032                         enables the thermal input of that particular UCH and
0033                         setting a bit to 0 enables the voltage input.
0034 
0035 * int_mode: int
0036                         Override the BIOS default temperature interrupt mode.
0037                         The only possible value is 0 which forces interrupt
0038                         mode 0. In this mode, any pending interrupt is cleared
0039                         when the status register is read but is regenerated as
0040                         long as the temperature stays above the hysteresis
0041                         limit.
0042 
0043 Be aware that overriding BIOS defaults might cause some unwanted side effects!
0044 
0045 
0046 Description
0047 -----------
0048 
0049 The VIA VT1211 Super-I/O chip includes complete hardware monitoring
0050 capabilities. It monitors 2 dedicated temperature sensor inputs (temp1 and
0051 temp2), 1 dedicated voltage (in5) and 2 fans. Additionally, the chip
0052 implements 5 universal input channels (UCH1-5) that can be individually
0053 programmed to either monitor a voltage or a temperature.
0054 
0055 This chip also provides manual and automatic control of fan speeds (according
0056 to the datasheet). The driver only supports automatic control since the manual
0057 mode doesn't seem to work as advertised in the datasheet. In fact I couldn't
0058 get manual mode to work at all! Be aware that automatic mode hasn't been
0059 tested very well (due to the fact that my EPIA M10000 doesn't have the fans
0060 connected to the PWM outputs of the VT1211 :-().
0061 
0062 The following table shows the relationship between the vt1211 inputs and the
0063 sysfs nodes.
0064 
0065 =============== ============== =========== ================================
0066 Sensor          Voltage Mode   Temp Mode   Default Use (from the datasheet)
0067 =============== ============== =========== ================================
0068 Reading 1                      temp1       Intel thermal diode
0069 Reading 3                      temp2       Internal thermal diode
0070 UCH1/Reading2   in0            temp3       NTC type thermistor
0071 UCH2            in1            temp4       +2.5V
0072 UCH3            in2            temp5       VccP (processor core)
0073 UCH4            in3            temp6       +5V
0074 UCH5            in4            temp7       +12V
0075 +3.3V           in5                        Internal VCC (+3.3V)
0076 =============== ============== =========== ================================
0077 
0078 
0079 Voltage Monitoring
0080 ------------------
0081 
0082 Voltages are sampled by an 8-bit ADC with a LSB of ~10mV. The supported input
0083 range is thus from 0 to 2.60V. Voltage values outside of this range need
0084 external scaling resistors. This external scaling needs to be compensated for
0085 via compute lines in sensors.conf, like:
0086 
0087 compute inx @*(1+R1/R2), @/(1+R1/R2)
0088 
0089 The board level scaling resistors according to VIA's recommendation are as
0090 follows. And this is of course totally dependent on the actual board
0091 implementation :-) You will have to find documentation for your own
0092 motherboard and edit sensors.conf accordingly.
0093 
0094 ============= ====== ====== ========= ============
0095                                       Expected
0096 Voltage       R1     R2     Divider   Raw Value
0097 ============= ====== ====== ========= ============
0098 +2.5V         2K     10K    1.2       2083 mV
0099 VccP          ---    ---    1.0       1400 mV [1]_
0100 +5V           14K    10K    2.4       2083 mV
0101 +12V          47K    10K    5.7       2105 mV
0102 +3.3V (int)   2K     3.4K   1.588     3300 mV [2]_
0103 +3.3V (ext)   6.8K   10K    1.68      1964 mV
0104 ============= ====== ====== ========= ============
0105 
0106 .. [1] Depending on the CPU (1.4V is for a VIA C3 Nehemiah).
0107 
0108 .. [2] R1 and R2 for 3.3V (int) are internal to the VT1211 chip and the driver
0109        performs the scaling and returns the properly scaled voltage value.
0110 
0111 Each measured voltage has an associated low and high limit which triggers an
0112 alarm when crossed.
0113 
0114 
0115 Temperature Monitoring
0116 ----------------------
0117 
0118 Temperatures are reported in millidegree Celsius. Each measured temperature
0119 has a high limit which triggers an alarm if crossed. There is an associated
0120 hysteresis value with each temperature below which the temperature has to drop
0121 before the alarm is cleared (this is only true for interrupt mode 0). The
0122 interrupt mode can be forced to 0 in case the BIOS doesn't do it
0123 automatically. See the 'Module Parameters' section for details.
0124 
0125 All temperature channels except temp2 are external. Temp2 is the VT1211
0126 internal thermal diode and the driver does all the scaling for temp2 and
0127 returns the temperature in millidegree Celsius. For the external channels
0128 temp1 and temp3-temp7, scaling depends on the board implementation and needs
0129 to be performed in userspace via sensors.conf.
0130 
0131 Temp1 is an Intel-type thermal diode which requires the following formula to
0132 convert between sysfs readings and real temperatures:
0133 
0134 compute temp1 (@-Offset)/Gain, (@*Gain)+Offset
0135 
0136 According to the VIA VT1211 BIOS porting guide, the following gain and offset
0137 values should be used:
0138 
0139 =============== ======== ===========
0140 Diode Type      Offset   Gain
0141 =============== ======== ===========
0142 Intel CPU       88.638   0.9528
0143                 65.000   0.9686 [3]_
0144 VIA C3 Ezra     83.869   0.9528
0145 VIA C3 Ezra-T   73.869   0.9528
0146 =============== ======== ===========
0147 
0148 .. [3] This is the formula from the lm_sensors 2.10.0 sensors.conf file. I don't
0149        know where it comes from or how it was derived, it's just listed here for
0150        completeness.
0151 
0152 Temp3-temp7 support NTC thermistors. For these channels, the driver returns
0153 the voltages as seen at the individual pins of UCH1-UCH5. The voltage at the
0154 pin (Vpin) is formed by a voltage divider made of the thermistor (Rth) and a
0155 scaling resistor (Rs)::
0156 
0157   Vpin = 2200 * Rth / (Rs + Rth)   (2200 is the ADC max limit of 2200 mV)
0158 
0159 The equation for the thermistor is as follows (google it if you want to know
0160 more about it)::
0161 
0162   Rth = Ro * exp(B * (1 / T - 1 / To))   (To is 298.15K (25C) and Ro is the
0163                                           nominal resistance at 25C)
0164 
0165 Mingling the above two equations and assuming Rs = Ro and B = 3435 yields the
0166 following formula for sensors.conf::
0167 
0168   compute tempx 1 / (1 / 298.15 - (` (2200 / @ - 1)) / 3435) - 273.15,
0169                 2200 / (1 + (^ (3435 / 298.15 - 3435 / (273.15 + @))))
0170 
0171 
0172 Fan Speed Control
0173 -----------------
0174 
0175 The VT1211 provides 2 programmable PWM outputs to control the speeds of 2
0176 fans. Writing a 2 to any of the two pwm[1-2]_enable sysfs nodes will put the
0177 PWM controller in automatic mode. There is only a single controller that
0178 controls both PWM outputs but each PWM output can be individually enabled and
0179 disabled.
0180 
0181 Each PWM has 4 associated distinct output duty-cycles: full, high, low and
0182 off. Full and off are internally hard-wired to 255 (100%) and 0 (0%),
0183 respectively. High and low can be programmed via
0184 pwm[1-2]_auto_point[2-3]_pwm. Each PWM output can be associated with a
0185 different thermal input but - and here's the weird part - only one set of
0186 thermal thresholds exist that controls both PWMs output duty-cycles. The
0187 thermal thresholds are accessible via pwm[1-2]_auto_point[1-4]_temp. Note
0188 that even though there are 2 sets of 4 auto points each, they map to the same
0189 registers in the VT1211 and programming one set is sufficient (actually only
0190 the first set pwm1_auto_point[1-4]_temp is writable, the second set is
0191 read-only).
0192 
0193 ========================== =========================================
0194 PWM Auto Point             PWM Output Duty-Cycle
0195 ========================== =========================================
0196 pwm[1-2]_auto_point4_pwm   full speed duty-cycle (hard-wired to 255)
0197 pwm[1-2]_auto_point3_pwm   high speed duty-cycle
0198 pwm[1-2]_auto_point2_pwm   low speed duty-cycle
0199 pwm[1-2]_auto_point1_pwm   off duty-cycle (hard-wired to 0)
0200 ========================== =========================================
0201 
0202 ==========================  =================
0203 Temp Auto Point             Thermal Threshold
0204 ==========================  =================
0205 pwm[1-2]_auto_point4_temp   full speed temp
0206 pwm[1-2]_auto_point3_temp   high speed temp
0207 pwm[1-2]_auto_point2_temp   low speed temp
0208 pwm[1-2]_auto_point1_temp   off temp
0209 ==========================  =================
0210 
0211 Long story short, the controller implements the following algorithm to set the
0212 PWM output duty-cycle based on the input temperature:
0213 
0214 =================== ======================= ========================
0215 Thermal Threshold   Output Duty-Cycle       Output Duty-Cycle
0216                     (Rising Temp)           (Falling Temp)
0217 =================== ======================= ========================
0218 -                   full speed duty-cycle   full speed duty-cycle
0219 full speed temp
0220 -                   high speed duty-cycle   full speed duty-cycle
0221 high speed temp
0222 -                   low speed duty-cycle    high speed duty-cycle
0223 low speed temp
0224 -                   off duty-cycle          low speed duty-cycle
0225 off temp
0226 =================== ======================= ========================