About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / hwmon / sysfs-interface




Custom Search

Based on kernel version 2.6.33. Page generated on 2010-02-24 15:36 EST.

1	Naming and data format standards for sysfs files
2	------------------------------------------------
3	
4	The libsensors library offers an interface to the raw sensors data
5	through the sysfs interface. Since lm-sensors 3.0.0, libsensors is
6	completely chip-independent. It assumes that all the kernel drivers
7	implement the standard sysfs interface described in this document.
8	This makes adding or updating support for any given chip very easy, as
9	libsensors, and applications using it, do not need to be modified.
10	This is a major improvement compared to lm-sensors 2.
11	
12	Note that motherboards vary widely in the connections to sensor chips.
13	There is no standard that ensures, for example, that the second
14	temperature sensor is connected to the CPU, or that the second fan is on
15	the CPU. Also, some values reported by the chips need some computation
16	before they make full sense. For example, most chips can only measure
17	voltages between 0 and +4V. Other voltages are scaled back into that
18	range using external resistors. Since the values of these resistors
19	can change from motherboard to motherboard, the conversions cannot be
20	hard coded into the driver and have to be done in user space.
21	
22	For this reason, even if we aim at a chip-independent libsensors, it will
23	still require a configuration file (e.g. /etc/sensors.conf) for proper
24	values conversion, labeling of inputs and hiding of unused inputs.
25	
26	An alternative method that some programs use is to access the sysfs
27	files directly. This document briefly describes the standards that the
28	drivers follow, so that an application program can scan for entries and
29	access this data in a simple and consistent way. That said, such programs
30	will have to implement conversion, labeling and hiding of inputs. For
31	this reason, it is still not recommended to bypass the library.
32	
33	Each chip gets its own directory in the sysfs /sys/devices tree.  To
34	find all sensor chips, it is easier to follow the device symlinks from
35	/sys/class/hwmon/hwmon*.
36	
37	Up to lm-sensors 3.0.0, libsensors looks for hardware monitoring attributes
38	in the "physical" device directory. Since lm-sensors 3.0.1, attributes found
39	in the hwmon "class" device directory are also supported. Complex drivers
40	(e.g. drivers for multifunction chips) may want to use this possibility to
41	avoid namespace pollution. The only drawback will be that older versions of
42	libsensors won't support the driver in question.
43	
44	All sysfs values are fixed point numbers.
45	
46	There is only one value per file, unlike the older /proc specification.
47	The common scheme for files naming is: <type><number>_<item>. Usual
48	types for sensor chips are "in" (voltage), "temp" (temperature) and
49	"fan" (fan). Usual items are "input" (measured value), "max" (high
50	threshold, "min" (low threshold). Numbering usually starts from 1,
51	except for voltages which start from 0 (because most data sheets use
52	this). A number is always used for elements that can be present more
53	than once, even if there is a single element of the given type on the
54	specific chip. Other files do not refer to a specific element, so
55	they have a simple name, and no number.
56	
57	Alarms are direct indications read from the chips. The drivers do NOT
58	make comparisons of readings to thresholds. This allows violations
59	between readings to be caught and alarmed. The exact definition of an
60	alarm (for example, whether a threshold must be met or must be exceeded
61	to cause an alarm) is chip-dependent.
62	
63	When setting values of hwmon sysfs attributes, the string representation of
64	the desired value must be written, note that strings which are not a number
65	are interpreted as 0! For more on how written strings are interpreted see the
66	"sysfs attribute writes interpretation" section at the end of this file.
67	
68	-------------------------------------------------------------------------
69	
70	[0-*]	denotes any positive number starting from 0
71	[1-*]	denotes any positive number starting from 1
72	RO	read only value
73	WO	write only value
74	RW	read/write value
75	
76	Read/write values may be read-only for some chips, depending on the
77	hardware implementation.
78	
79	All entries (except name) are optional, and should only be created in a
80	given driver if the chip has the feature.
81	
82	
83	********
84	* Name *
85	********
86	
87	name		The chip name.
88			This should be a short, lowercase string, not containing
89			spaces nor dashes, representing the chip name. This is
90			the only mandatory attribute.
91			I2C devices get this attribute created automatically.
92			RO
93	
94	
95	************
96	* Voltages *
97	************
98	
99	in[0-*]_min	Voltage min value.
100			Unit: millivolt
101			RW
102			
103	in[0-*]_max	Voltage max value.
104			Unit: millivolt
105			RW
106			
107	in[0-*]_input	Voltage input value.
108			Unit: millivolt
109			RO
110			Voltage measured on the chip pin.
111			Actual voltage depends on the scaling resistors on the
112			motherboard, as recommended in the chip datasheet.
113			This varies by chip and by motherboard.
114			Because of this variation, values are generally NOT scaled
115			by the chip driver, and must be done by the application.
116			However, some drivers (notably lm87 and via686a)
117			do scale, because of internal resistors built into a chip.
118			These drivers will output the actual voltage. Rule of
119			thumb: drivers should report the voltage values at the
120			"pins" of the chip.
121	
122	in[0-*]_label	Suggested voltage channel label.
123			Text string
124			Should only be created if the driver has hints about what
125			this voltage channel is being used for, and user-space
126			doesn't. In all other cases, the label is provided by
127			user-space.
128			RO
129	
130	cpu[0-*]_vid	CPU core reference voltage.
131			Unit: millivolt
132			RO
133			Not always correct.
134	
135	vrm		Voltage Regulator Module version number. 
136			RW (but changing it should no more be necessary)
137			Originally the VRM standard version multiplied by 10, but now
138			an arbitrary number, as not all standards have a version
139			number.
140			Affects the way the driver calculates the CPU core reference
141			voltage from the vid pins.
142	
143	Also see the Alarms section for status flags associated with voltages.
144	
145	
146	********
147	* Fans *
148	********
149	
150	fan[1-*]_min	Fan minimum value
151			Unit: revolution/min (RPM)
152			RW
153	
154	fan[1-*]_max	Fan maximum value
155			Unit: revolution/min (RPM)
156			Only rarely supported by the hardware.
157			RW
158	
159	fan[1-*]_input	Fan input value.
160			Unit: revolution/min (RPM)
161			RO
162	
163	fan[1-*]_div	Fan divisor.
164			Integer value in powers of two (1, 2, 4, 8, 16, 32, 64, 128).
165			RW
166			Some chips only support values 1, 2, 4 and 8.
167			Note that this is actually an internal clock divisor, which
168			affects the measurable speed range, not the read value.
169	
170	fan[1-*]_target
171			Desired fan speed
172			Unit: revolution/min (RPM)
173			RW
174			Only makes sense if the chip supports closed-loop fan speed
175			control based on the measured fan speed.
176	
177	fan[1-*]_label	Suggested fan channel label.
178			Text string
179			Should only be created if the driver has hints about what
180			this fan channel is being used for, and user-space doesn't.
181			In all other cases, the label is provided by user-space.
182			RO
183	
184	Also see the Alarms section for status flags associated with fans.
185	
186	
187	*******
188	* PWM *
189	*******
190	
191	pwm[1-*]	Pulse width modulation fan control.
192			Integer value in the range 0 to 255
193			RW
194			255 is max or 100%.
195	
196	pwm[1-*]_enable
197			Fan speed control method:
198			0: no fan speed control (i.e. fan at full speed)
199			1: manual fan speed control enabled (using pwm[1-*])
200			2+: automatic fan speed control enabled
201			Check individual chip documentation files for automatic mode
202			details.
203			RW
204	
205	pwm[1-*]_mode	0: DC mode (direct current)
206			1: PWM mode (pulse-width modulation)
207			RW
208	
209	pwm[1-*]_freq	Base PWM frequency in Hz.
210			Only possibly available when pwmN_mode is PWM, but not always
211			present even then.
212			RW
213	
214	pwm[1-*]_auto_channels_temp
215			Select which temperature channels affect this PWM output in
216			auto mode. Bitfield, 1 is temp1, 2 is temp2, 4 is temp3 etc...
217			Which values are possible depend on the chip used.
218			RW
219	
220	pwm[1-*]_auto_point[1-*]_pwm
221	pwm[1-*]_auto_point[1-*]_temp
222	pwm[1-*]_auto_point[1-*]_temp_hyst
223			Define the PWM vs temperature curve. Number of trip points is
224			chip-dependent. Use this for chips which associate trip points
225			to PWM output channels.
226			RW
227	
228	temp[1-*]_auto_point[1-*]_pwm
229	temp[1-*]_auto_point[1-*]_temp
230	temp[1-*]_auto_point[1-*]_temp_hyst
231			Define the PWM vs temperature curve. Number of trip points is
232			chip-dependent. Use this for chips which associate trip points
233			to temperature channels.
234			RW
235	
236	There is a third case where trip points are associated to both PWM output
237	channels and temperature channels: the PWM values are associated to PWM
238	output channels while the temperature values are associated to temperature
239	channels. In that case, the result is determined by the mapping between
240	temperature inputs and PWM outputs. When several temperature inputs are
241	mapped to a given PWM output, this leads to several candidate PWM values.
242	The actual result is up to the chip, but in general the highest candidate
243	value (fastest fan speed) wins.
244	
245	
246	****************
247	* Temperatures *
248	****************
249	
250	temp[1-*]_type	Sensor type selection.
251			Integers 1 to 6
252			RW
253			1: PII/Celeron Diode
254			2: 3904 transistor
255			3: thermal diode
256			4: thermistor
257			5: AMD AMDSI
258			6: Intel PECI
259			Not all types are supported by all chips
260	
261	temp[1-*]_max	Temperature max value.
262			Unit: millidegree Celsius (or millivolt, see below)
263			RW
264	
265	temp[1-*]_min	Temperature min value.
266			Unit: millidegree Celsius
267			RW
268	
269	temp[1-*]_max_hyst
270			Temperature hysteresis value for max limit.
271			Unit: millidegree Celsius
272			Must be reported as an absolute temperature, NOT a delta
273			from the max value.
274			RW
275	
276	temp[1-*]_input Temperature input value.
277			Unit: millidegree Celsius
278			RO
279	
280	temp[1-*]_crit	Temperature critical value, typically greater than
281			corresponding temp_max values.
282			Unit: millidegree Celsius
283			RW
284	
285	temp[1-*]_crit_hyst
286			Temperature hysteresis value for critical limit.
287			Unit: millidegree Celsius
288			Must be reported as an absolute temperature, NOT a delta
289			from the critical value.
290			RW
291	
292	temp[1-*]_offset
293			Temperature offset which is added to the temperature reading
294			by the chip.
295			Unit: millidegree Celsius
296			Read/Write value.
297	
298	temp[1-*]_label	Suggested temperature channel label.
299			Text string
300			Should only be created if the driver has hints about what
301			this temperature channel is being used for, and user-space
302			doesn't. In all other cases, the label is provided by
303			user-space.
304			RO
305	
306	temp[1-*]_lowest
307			Historical minimum temperature
308			Unit: millidegree Celsius
309			RO
310	
311	temp[1-*]_highest
312			Historical maximum temperature
313			Unit: millidegree Celsius
314			RO
315	
316	temp[1-*]_reset_history
317			Reset temp_lowest and temp_highest
318			WO
319	
320	temp_reset_history
321			Reset temp_lowest and temp_highest for all sensors
322			WO
323	
324	Some chips measure temperature using external thermistors and an ADC, and
325	report the temperature measurement as a voltage. Converting this voltage
326	back to a temperature (or the other way around for limits) requires
327	mathematical functions not available in the kernel, so the conversion
328	must occur in user space. For these chips, all temp* files described
329	above should contain values expressed in millivolt instead of millidegree
330	Celsius. In other words, such temperature channels are handled as voltage
331	channels by the driver.
332	
333	Also see the Alarms section for status flags associated with temperatures.
334	
335	
336	************
337	* Currents *
338	************
339	
340	Note that no known chip provides current measurements as of writing,
341	so this part is theoretical, so to say.
342	
343	curr[1-*]_max	Current max value
344			Unit: milliampere
345			RW
346	
347	curr[1-*]_min	Current min value.
348			Unit: milliampere
349			RW
350	
351	curr[1-*]_input	Current input value
352			Unit: milliampere
353			RO
354	
355	*********
356	* Power *
357	*********
358	
359	power[1-*]_average		Average power use
360					Unit: microWatt
361					RO
362	
363	power[1-*]_average_interval	Power use averaging interval.  A poll
364					notification is sent to this file if the
365					hardware changes the averaging interval.
366					Unit: milliseconds
367					RW
368	
369	power[1-*]_average_interval_max	Maximum power use averaging interval
370					Unit: milliseconds
371					RO
372	
373	power[1-*]_average_interval_min	Minimum power use averaging interval
374					Unit: milliseconds
375					RO
376	
377	power[1-*]_average_highest	Historical average maximum power use
378					Unit: microWatt
379					RO
380	
381	power[1-*]_average_lowest	Historical average minimum power use
382					Unit: microWatt
383					RO
384	
385	power[1-*]_average_max		A poll notification is sent to
386					power[1-*]_average when power use
387					rises above this value.
388					Unit: microWatt
389					RW
390	
391	power[1-*]_average_min		A poll notification is sent to
392					power[1-*]_average when power use
393					sinks below this value.
394					Unit: microWatt
395					RW
396	
397	power[1-*]_input		Instantaneous power use
398					Unit: microWatt
399					RO
400	
401	power[1-*]_input_highest	Historical maximum power use
402					Unit: microWatt
403					RO
404	
405	power[1-*]_input_lowest		Historical minimum power use
406					Unit: microWatt
407					RO
408	
409	power[1-*]_reset_history	Reset input_highest, input_lowest,
410					average_highest and average_lowest.
411					WO
412	
413	power[1-*]_accuracy		Accuracy of the power meter.
414					Unit: Percent
415					RO
416	
417	power[1-*]_alarm		1 if the system is drawing more power than the
418					cap allows; 0 otherwise.  A poll notification is
419					sent to this file when the power use exceeds the
420					cap.  This file only appears if the cap is known
421					to be enforced by hardware.
422					RO
423	
424	power[1-*]_cap			If power use rises above this limit, the
425					system should take action to reduce power use.
426					A poll notification is sent to this file if the
427					cap is changed by the hardware.  The *_cap
428					files only appear if the cap is known to be
429					enforced by hardware.
430					Unit: microWatt
431					RW
432	
433	power[1-*]_cap_hyst		Margin of hysteresis built around capping and
434					notification.
435					Unit: microWatt
436					RW
437	
438	power[1-*]_cap_max		Maximum cap that can be set.
439					Unit: microWatt
440					RO
441	
442	power[1-*]_cap_min		Minimum cap that can be set.
443					Unit: microWatt
444					RO
445	
446	**********
447	* Energy *
448	**********
449	
450	energy[1-*]_input		Cumulative energy use
451					Unit: microJoule
452					RO
453	
454	
455	**********
456	* Alarms *
457	**********
458	
459	Each channel or limit may have an associated alarm file, containing a
460	boolean value. 1 means than an alarm condition exists, 0 means no alarm.
461	
462	Usually a given chip will either use channel-related alarms, or
463	limit-related alarms, not both. The driver should just reflect the hardware
464	implementation.
465	
466	in[0-*]_alarm
467	fan[1-*]_alarm
468	temp[1-*]_alarm
469			Channel alarm
470			0: no alarm
471			1: alarm
472			RO
473	
474	OR
475	
476	in[0-*]_min_alarm
477	in[0-*]_max_alarm
478	fan[1-*]_min_alarm
479	fan[1-*]_max_alarm
480	temp[1-*]_min_alarm
481	temp[1-*]_max_alarm
482	temp[1-*]_crit_alarm
483			Limit alarm
484			0: no alarm
485			1: alarm
486			RO
487	
488	Each input channel may have an associated fault file. This can be used
489	to notify open diodes, unconnected fans etc. where the hardware
490	supports it. When this boolean has value 1, the measurement for that
491	channel should not be trusted.
492	
493	in[0-*]_fault
494	fan[1-*]_fault
495	temp[1-*]_fault
496			Input fault condition
497			0: no fault occured
498			1: fault condition
499			RO
500	
501	Some chips also offer the possibility to get beeped when an alarm occurs:
502	
503	beep_enable	Master beep enable
504			0: no beeps
505			1: beeps
506			RW
507	
508	in[0-*]_beep
509	fan[1-*]_beep
510	temp[1-*]_beep
511			Channel beep
512			0: disable
513			1: enable
514			RW
515	
516	In theory, a chip could provide per-limit beep masking, but no such chip
517	was seen so far.
518	
519	Old drivers provided a different, non-standard interface to alarms and
520	beeps. These interface files are deprecated, but will be kept around
521	for compatibility reasons:
522	
523	alarms		Alarm bitmask.
524			RO
525			Integer representation of one to four bytes.
526			A '1' bit means an alarm.
527			Chips should be programmed for 'comparator' mode so that
528			the alarm will 'come back' after you read the register
529			if it is still valid.
530			Generally a direct representation of a chip's internal
531			alarm registers; there is no standard for the position
532			of individual bits. For this reason, the use of this
533			interface file for new drivers is discouraged. Use
534			individual *_alarm and *_fault files instead.
535			Bits are defined in kernel/include/sensors.h.
536	
537	beep_mask	Bitmask for beep.
538			Same format as 'alarms' with the same bit locations,
539			use discouraged for the same reason. Use individual
540			*_beep files instead.
541			RW
542	
543	
544	***********************
545	* Intrusion detection *
546	***********************
547	
548	intrusion[0-*]_alarm
549			Chassis intrusion detection
550			0: OK
551			1: intrusion detected
552			RW
553			Contrary to regular alarm flags which clear themselves
554			automatically when read, this one sticks until cleared by
555			the user. This is done by writing 0 to the file. Writing
556			other values is unsupported.
557	
558	intrusion[0-*]_beep
559			Chassis intrusion beep
560			0: disable
561			1: enable
562			RW
563	
564	
565	sysfs attribute writes interpretation
566	-------------------------------------
567	
568	hwmon sysfs attributes always contain numbers, so the first thing to do is to
569	convert the input to a number, there are 2 ways todo this depending whether
570	the number can be negative or not:
571	unsigned long u = simple_strtoul(buf, NULL, 10);
572	long s = simple_strtol(buf, NULL, 10);
573	
574	With buf being the buffer with the user input being passed by the kernel.
575	Notice that we do not use the second argument of strto[u]l, and thus cannot
576	tell when 0 is returned, if this was really 0 or is caused by invalid input.
577	This is done deliberately as checking this everywhere would add a lot of
578	code to the kernel.
579	
580	Notice that it is important to always store the converted value in an
581	unsigned long or long, so that no wrap around can happen before any further
582	checking.
583	
584	After the input string is converted to an (unsigned) long, the value should be
585	checked if its acceptable. Be careful with further conversions on the value
586	before checking it for validity, as these conversions could still cause a wrap
587	around before the check. For example do not multiply the result, and only
588	add/subtract if it has been divided before the add/subtract.
589	
590	What to do if a value is found to be invalid, depends on the type of the
591	sysfs attribute that is being set. If it is a continuous setting like a
592	tempX_max or inX_max attribute, then the value should be clamped to its
593	limits using SENSORS_LIMIT(value, min_limit, max_limit). If it is not
594	continuous like for example a tempX_type, then when an invalid value is
595	written, -EINVAL should be returned.
596	
597	Example1, temp1_max, register is a signed 8 bit value (-128 - 127 degrees):
598	
599		long v = simple_strtol(buf, NULL, 10) / 1000;
600		v = SENSORS_LIMIT(v, -128, 127);
601		/* write v to register */
602	
603	Example2, fan divider setting, valid values 2, 4 and 8:
604	
605		unsigned long v = simple_strtoul(buf, NULL, 10);
606	
607		switch (v) {
608		case 2: v = 1; break;
609		case 4: v = 2; break;
610		case 8: v = 3; break;
611		default:
612			return -EINVAL;
613		}
614		/* write v to register */
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.