Blame view

Documentation/hwmon/vt1211 8.45 KB
61d0b5336   Juerg Haefliger   vt1211: Add docum...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  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.
a1fdcb96e   Juerg Haefliger   vt1211: Document ...
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
  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!
61d0b5336   Juerg Haefliger   vt1211: Add docum...
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
  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
a1fdcb96e   Juerg Haefliger   vt1211: Document ...
107
  automatically. See the 'Module Parameters' section for details.
61d0b5336   Juerg Haefliger   vt1211: Add docum...
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
  
  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