vt1211 7.8 KB

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