About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / hwmon / vt1211




Custom Search

Based on kernel version 3.16. Page generated on 2014-08-06 21:39 EST.

1	Kernel driver vt1211
2	====================
3	
4	Supported chips:
5	  * VIA VT1211
6	    Prefix: 'vt1211'
7	    Addresses scanned: none, address read from Super-I/O config space
8	    Datasheet: Provided by VIA upon request and under NDA
9	
10	Authors: Juerg Haefliger <juergh@gmail.com>
11	
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.
14	
15	Thanks to Joseph Chan and Fiona Gatt from VIA for providing documentation and
16	technical support.
17	
18	
19	Module Parameters
20	-----------------
21	
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.
28	
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
34				limit.
35	
36	Be aware that overriding BIOS defaults might cause some unwanted side effects!
37	
38	
39	Description
40	-----------
41	
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.
47	
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 :-().
54	
55	The following table shows the relationship between the vt1211 inputs and the
56	sysfs nodes.
57	
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
63	UCH2            in1            temp4       +2.5V
64	UCH3            in2            temp5       VccP (processor core)
65	UCH4            in3            temp6       +5V
66	UCH5            in4            temp7       +12V
67	+3.3V           in5                        Internal VCC (+3.3V)
68	
69	
70	Voltage Monitoring
71	------------------
72	
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:
77	
78	compute inx @*(1+R1/R2), @/(1+R1/R2)
79	
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.
84	
85	                                      Expected
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
94	
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.
98	
99	Each measured voltage has an associated low and high limit which triggers an
100	alarm when crossed.
101	
102	
103	Temperature Monitoring
104	----------------------
105	
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.
112	
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.
118	
119	Temp1 is an Intel-type thermal diode which requires the following formula to
120	convert between sysfs readings and real temperatures:
121	
122	compute temp1 (@-Offset)/Gain, (@*Gain)+Offset
123	
124	According to the VIA VT1211 BIOS porting guide, the following gain and offset
125	values should be used:
126	
127	Diode Type      Offset   Gain
128	----------      ------   ----
129	Intel CPU       88.638   0.9528
130	                65.000   0.9686   *)
131	VIA C3 Ezra     83.869   0.9528
132	VIA C3 Ezra-T   73.869   0.9528
133	
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
136	completeness.
137	
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):
142	
143	Vpin = 2200 * Rth / (Rs + Rth)   (2200 is the ADC max limit of 2200 mV)
144	
145	The equation for the thermistor is as follows (google it if you want to know
146	more about it):
147	
148	Rth = Ro * exp(B * (1 / T - 1 / To))   (To is 298.15K (25C) and Ro is the
149	                                        nominal resistance at 25C)
150	
151	Mingling the above two equations and assuming Rs = Ro and B = 3435 yields the
152	following formula for sensors.conf:
153	
154	compute tempx 1 / (1 / 298.15 - (` (2200 / @ - 1)) / 3435) - 273.15,
155	              2200 / (1 + (^ (3435 / 298.15 - 3435 / (273.15 + @))))
156	
157	
158	Fan Speed Control
159	-----------------
160	
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
165	disabled.
166	
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
177	read-only).
178	
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)
185	
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
192	
193	Long story short, the controller implements the following algorithm to set the
194	PWM output duty-cycle based on the input temperature:
195	
196	Thermal Threshold             Output Duty-Cycle
197	                    (Rising Temp)           (Falling Temp)
198	----------------------------------------------------------
199	                    full speed duty-cycle   full speed duty-cycle
200	full speed temp
201	                    high speed duty-cycle   full speed duty-cycle
202	high speed temp
203	                    low speed duty-cycle    high speed duty-cycle
204	low speed temp
205	                    off duty-cycle          low speed duty-cycle
206	off temp
Hide Line Numbers
About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Information is copyright its respective author. All material is available from the Linux Kernel Source distributed under a GPL License. This page is provided as a free service by mjmwired.net.