123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- Kernel driver vt1211
- ====================
- Supported chips:
- * VIA VT1211
- Prefix: 'vt1211'
- Addresses scanned: none, address read from Super-I/O config space
- Datasheet: Provided by VIA upon request and under NDA
- Authors: Juerg Haefliger <juergh@gmail.com>
- This driver is based on the driver for kernel 2.4 by Mark D. Studebaker and
- its port to kernel 2.6 by Lars Ekman.
- Thanks to Joseph Chan and Fiona Gatt from VIA for providing documentation and
- technical support.
- Module Parameters
- -----------------
- * uch_config: int Override the BIOS default universal channel (UCH)
- configuration for channels 1-5.
- Legal values are in the range of 0-31. Bit 0 maps to
- UCH1, bit 1 maps to UCH2 and so on. Setting a bit to 1
- enables the thermal input of that particular UCH and
- setting a bit to 0 enables the voltage input.
- * int_mode: int Override the BIOS default temperature interrupt mode.
- The only possible value is 0 which forces interrupt
- mode 0. In this mode, any pending interrupt is cleared
- when the status register is read but is regenerated as
- long as the temperature stays above the hysteresis
- limit.
- Be aware that overriding BIOS defaults might cause some unwanted side effects!
- Description
- -----------
- The VIA VT1211 Super-I/O chip includes complete hardware monitoring
- capabilities. It monitors 2 dedicated temperature sensor inputs (temp1 and
- temp2), 1 dedicated voltage (in5) and 2 fans. Additionally, the chip
- implements 5 universal input channels (UCH1-5) that can be individually
- programmed to either monitor a voltage or a temperature.
- This chip also provides manual and automatic control of fan speeds (according
- to the datasheet). The driver only supports automatic control since the manual
- mode doesn't seem to work as advertised in the datasheet. In fact I couldn't
- get manual mode to work at all! Be aware that automatic mode hasn't been
- tested very well (due to the fact that my EPIA M10000 doesn't have the fans
- connected to the PWM outputs of the VT1211 :-().
- The following table shows the relationship between the vt1211 inputs and the
- sysfs nodes.
- Sensor Voltage Mode Temp Mode Default Use (from the datasheet)
- ------ ------------ --------- --------------------------------
- Reading 1 temp1 Intel thermal diode
- Reading 3 temp2 Internal thermal diode
- UCH1/Reading2 in0 temp3 NTC type thermistor
- UCH2 in1 temp4 +2.5V
- UCH3 in2 temp5 VccP (processor core)
- UCH4 in3 temp6 +5V
- UCH5 in4 temp7 +12V
- +3.3V in5 Internal VCC (+3.3V)
- Voltage Monitoring
- ------------------
- Voltages are sampled by an 8-bit ADC with a LSB of ~10mV. The supported input
- range is thus from 0 to 2.60V. Voltage values outside of this range need
- external scaling resistors. This external scaling needs to be compensated for
- via compute lines in sensors.conf, like:
- compute inx @*(1+R1/R2), @/(1+R1/R2)
- The board level scaling resistors according to VIA's recommendation are as
- follows. And this is of course totally dependent on the actual board
- implementation :-) You will have to find documentation for your own
- motherboard and edit sensors.conf accordingly.
- Expected
- Voltage R1 R2 Divider Raw Value
- -----------------------------------------------
- +2.5V 2K 10K 1.2 2083 mV
- VccP --- --- 1.0 1400 mV (1)
- +5V 14K 10K 2.4 2083 mV
- +12V 47K 10K 5.7 2105 mV
- +3.3V (int) 2K 3.4K 1.588 3300 mV (2)
- +3.3V (ext) 6.8K 10K 1.68 1964 mV
- (1) Depending on the CPU (1.4V is for a VIA C3 Nehemiah).
- (2) R1 and R2 for 3.3V (int) are internal to the VT1211 chip and the driver
- performs the scaling and returns the properly scaled voltage value.
- Each measured voltage has an associated low and high limit which triggers an
- alarm when crossed.
- Temperature Monitoring
- ----------------------
- Temperatures are reported in millidegree Celsius. Each measured temperature
- has a high limit which triggers an alarm if crossed. There is an associated
- hysteresis value with each temperature below which the temperature has to drop
- before the alarm is cleared (this is only true for interrupt mode 0). The
- interrupt mode can be forced to 0 in case the BIOS doesn't do it
- automatically. See the 'Module Parameters' section for details.
- All temperature channels except temp2 are external. Temp2 is the VT1211
- internal thermal diode and the driver does all the scaling for temp2 and
- returns the temperature in millidegree Celsius. For the external channels
- temp1 and temp3-temp7, scaling depends on the board implementation and needs
- to be performed in userspace via sensors.conf.
- Temp1 is an Intel-type thermal diode which requires the following formula to
- convert between sysfs readings and real temperatures:
- compute temp1 (@-Offset)/Gain, (@*Gain)+Offset
- According to the VIA VT1211 BIOS porting guide, the following gain and offset
- values should be used:
- Diode Type Offset Gain
- ---------- ------ ----
- Intel CPU 88.638 0.9528
- 65.000 0.9686 *)
- VIA C3 Ezra 83.869 0.9528
- VIA C3 Ezra-T 73.869 0.9528
- *) This is the formula from the lm_sensors 2.10.0 sensors.conf file. I don't
- know where it comes from or how it was derived, it's just listed here for
- completeness.
- Temp3-temp7 support NTC thermistors. For these channels, the driver returns
- the voltages as seen at the individual pins of UCH1-UCH5. The voltage at the
- pin (Vpin) is formed by a voltage divider made of the thermistor (Rth) and a
- scaling resistor (Rs):
- Vpin = 2200 * Rth / (Rs + Rth) (2200 is the ADC max limit of 2200 mV)
- The equation for the thermistor is as follows (google it if you want to know
- more about it):
- Rth = Ro * exp(B * (1 / T - 1 / To)) (To is 298.15K (25C) and Ro is the
- nominal resistance at 25C)
- Mingling the above two equations and assuming Rs = Ro and B = 3435 yields the
- following formula for sensors.conf:
- compute tempx 1 / (1 / 298.15 - (` (2200 / @ - 1)) / 3435) - 273.15,
- 2200 / (1 + (^ (3435 / 298.15 - 3435 / (273.15 + @))))
- Fan Speed Control
- -----------------
- The VT1211 provides 2 programmable PWM outputs to control the speeds of 2
- fans. Writing a 2 to any of the two pwm[1-2]_enable sysfs nodes will put the
- PWM controller in automatic mode. There is only a single controller that
- controls both PWM outputs but each PWM output can be individually enabled and
- disabled.
- Each PWM has 4 associated distinct output duty-cycles: full, high, low and
- off. Full and off are internally hard-wired to 255 (100%) and 0 (0%),
- respectively. High and low can be programmed via
- pwm[1-2]_auto_point[2-3]_pwm. Each PWM output can be associated with a
- different thermal input but - and here's the weird part - only one set of
- thermal thresholds exist that controls both PWMs output duty-cycles. The
- thermal thresholds are accessible via pwm[1-2]_auto_point[1-4]_temp. Note
- that even though there are 2 sets of 4 auto points each, they map to the same
- registers in the VT1211 and programming one set is sufficient (actually only
- the first set pwm1_auto_point[1-4]_temp is writable, the second set is
- read-only).
- PWM Auto Point PWM Output Duty-Cycle
- ------------------------------------------------
- pwm[1-2]_auto_point4_pwm full speed duty-cycle (hard-wired to 255)
- pwm[1-2]_auto_point3_pwm high speed duty-cycle
- pwm[1-2]_auto_point2_pwm low speed duty-cycle
- pwm[1-2]_auto_point1_pwm off duty-cycle (hard-wired to 0)
- Temp Auto Point Thermal Threshold
- ---------------------------------------------
- pwm[1-2]_auto_point4_temp full speed temp
- pwm[1-2]_auto_point3_temp high speed temp
- pwm[1-2]_auto_point2_temp low speed temp
- pwm[1-2]_auto_point1_temp off temp
- Long story short, the controller implements the following algorithm to set the
- PWM output duty-cycle based on the input temperature:
- Thermal Threshold Output Duty-Cycle
- (Rising Temp) (Falling Temp)
- ----------------------------------------------------------
- full speed duty-cycle full speed duty-cycle
- full speed temp
- high speed duty-cycle full speed duty-cycle
- high speed temp
- low speed duty-cycle high speed duty-cycle
- low speed temp
- off duty-cycle low speed duty-cycle
- off temp
|