xref: /OK3568_Linux_fs/kernel/Documentation/hwmon/sysfs-interface.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunNaming and data format standards for sysfs files
2*4882a593Smuzhiyun================================================
3*4882a593Smuzhiyun
4*4882a593SmuzhiyunThe libsensors library offers an interface to the raw sensors data
5*4882a593Smuzhiyunthrough the sysfs interface. Since lm-sensors 3.0.0, libsensors is
6*4882a593Smuzhiyuncompletely chip-independent. It assumes that all the kernel drivers
7*4882a593Smuzhiyunimplement the standard sysfs interface described in this document.
8*4882a593SmuzhiyunThis makes adding or updating support for any given chip very easy, as
9*4882a593Smuzhiyunlibsensors, and applications using it, do not need to be modified.
10*4882a593SmuzhiyunThis is a major improvement compared to lm-sensors 2.
11*4882a593Smuzhiyun
12*4882a593SmuzhiyunNote that motherboards vary widely in the connections to sensor chips.
13*4882a593SmuzhiyunThere is no standard that ensures, for example, that the second
14*4882a593Smuzhiyuntemperature sensor is connected to the CPU, or that the second fan is on
15*4882a593Smuzhiyunthe CPU. Also, some values reported by the chips need some computation
16*4882a593Smuzhiyunbefore they make full sense. For example, most chips can only measure
17*4882a593Smuzhiyunvoltages between 0 and +4V. Other voltages are scaled back into that
18*4882a593Smuzhiyunrange using external resistors. Since the values of these resistors
19*4882a593Smuzhiyuncan change from motherboard to motherboard, the conversions cannot be
20*4882a593Smuzhiyunhard coded into the driver and have to be done in user space.
21*4882a593Smuzhiyun
22*4882a593SmuzhiyunFor this reason, even if we aim at a chip-independent libsensors, it will
23*4882a593Smuzhiyunstill require a configuration file (e.g. /etc/sensors.conf) for proper
24*4882a593Smuzhiyunvalues conversion, labeling of inputs and hiding of unused inputs.
25*4882a593Smuzhiyun
26*4882a593SmuzhiyunAn alternative method that some programs use is to access the sysfs
27*4882a593Smuzhiyunfiles directly. This document briefly describes the standards that the
28*4882a593Smuzhiyundrivers follow, so that an application program can scan for entries and
29*4882a593Smuzhiyunaccess this data in a simple and consistent way. That said, such programs
30*4882a593Smuzhiyunwill have to implement conversion, labeling and hiding of inputs. For
31*4882a593Smuzhiyunthis reason, it is still not recommended to bypass the library.
32*4882a593Smuzhiyun
33*4882a593SmuzhiyunEach chip gets its own directory in the sysfs /sys/devices tree.  To
34*4882a593Smuzhiyunfind all sensor chips, it is easier to follow the device symlinks from
35*4882a593Smuzhiyun`/sys/class/hwmon/hwmon*`.
36*4882a593Smuzhiyun
37*4882a593SmuzhiyunUp to lm-sensors 3.0.0, libsensors looks for hardware monitoring attributes
38*4882a593Smuzhiyunin the "physical" device directory. Since lm-sensors 3.0.1, attributes found
39*4882a593Smuzhiyunin the hwmon "class" device directory are also supported. Complex drivers
40*4882a593Smuzhiyun(e.g. drivers for multifunction chips) may want to use this possibility to
41*4882a593Smuzhiyunavoid namespace pollution. The only drawback will be that older versions of
42*4882a593Smuzhiyunlibsensors won't support the driver in question.
43*4882a593Smuzhiyun
44*4882a593SmuzhiyunAll sysfs values are fixed point numbers.
45*4882a593Smuzhiyun
46*4882a593SmuzhiyunThere is only one value per file, unlike the older /proc specification.
47*4882a593SmuzhiyunThe common scheme for files naming is: <type><number>_<item>. Usual
48*4882a593Smuzhiyuntypes for sensor chips are "in" (voltage), "temp" (temperature) and
49*4882a593Smuzhiyun"fan" (fan). Usual items are "input" (measured value), "max" (high
50*4882a593Smuzhiyunthreshold, "min" (low threshold). Numbering usually starts from 1,
51*4882a593Smuzhiyunexcept for voltages which start from 0 (because most data sheets use
52*4882a593Smuzhiyunthis). A number is always used for elements that can be present more
53*4882a593Smuzhiyunthan once, even if there is a single element of the given type on the
54*4882a593Smuzhiyunspecific chip. Other files do not refer to a specific element, so
55*4882a593Smuzhiyunthey have a simple name, and no number.
56*4882a593Smuzhiyun
57*4882a593SmuzhiyunAlarms are direct indications read from the chips. The drivers do NOT
58*4882a593Smuzhiyunmake comparisons of readings to thresholds. This allows violations
59*4882a593Smuzhiyunbetween readings to be caught and alarmed. The exact definition of an
60*4882a593Smuzhiyunalarm (for example, whether a threshold must be met or must be exceeded
61*4882a593Smuzhiyunto cause an alarm) is chip-dependent.
62*4882a593Smuzhiyun
63*4882a593SmuzhiyunWhen setting values of hwmon sysfs attributes, the string representation of
64*4882a593Smuzhiyunthe desired value must be written, note that strings which are not a number
65*4882a593Smuzhiyunare interpreted as 0! For more on how written strings are interpreted see the
66*4882a593Smuzhiyun"sysfs attribute writes interpretation" section at the end of this file.
67*4882a593Smuzhiyun
68*4882a593Smuzhiyun-------------------------------------------------------------------------
69*4882a593Smuzhiyun
70*4882a593Smuzhiyun======= ===========================================
71*4882a593Smuzhiyun`[0-*]`	denotes any positive number starting from 0
72*4882a593Smuzhiyun`[1-*]`	denotes any positive number starting from 1
73*4882a593SmuzhiyunRO	read only value
74*4882a593SmuzhiyunWO	write only value
75*4882a593SmuzhiyunRW	read/write value
76*4882a593Smuzhiyun======= ===========================================
77*4882a593Smuzhiyun
78*4882a593SmuzhiyunRead/write values may be read-only for some chips, depending on the
79*4882a593Smuzhiyunhardware implementation.
80*4882a593Smuzhiyun
81*4882a593SmuzhiyunAll entries (except name) are optional, and should only be created in a
82*4882a593Smuzhiyungiven driver if the chip has the feature.
83*4882a593Smuzhiyun
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun*****************
86*4882a593SmuzhiyunGlobal attributes
87*4882a593Smuzhiyun*****************
88*4882a593Smuzhiyun
89*4882a593Smuzhiyun`name`
90*4882a593Smuzhiyun		The chip name.
91*4882a593Smuzhiyun		This should be a short, lowercase string, not containing
92*4882a593Smuzhiyun		whitespace, dashes, or the wildcard character '*'.
93*4882a593Smuzhiyun		This attribute represents the chip name. It is the only
94*4882a593Smuzhiyun		mandatory attribute.
95*4882a593Smuzhiyun		I2C devices get this attribute created automatically.
96*4882a593Smuzhiyun
97*4882a593Smuzhiyun		RO
98*4882a593Smuzhiyun
99*4882a593Smuzhiyun`update_interval`
100*4882a593Smuzhiyun		The interval at which the chip will update readings.
101*4882a593Smuzhiyun		Unit: millisecond
102*4882a593Smuzhiyun
103*4882a593Smuzhiyun		RW
104*4882a593Smuzhiyun
105*4882a593Smuzhiyun		Some devices have a variable update rate or interval.
106*4882a593Smuzhiyun		This attribute can be used to change it to the desired value.
107*4882a593Smuzhiyun
108*4882a593Smuzhiyun
109*4882a593Smuzhiyun********
110*4882a593SmuzhiyunVoltages
111*4882a593Smuzhiyun********
112*4882a593Smuzhiyun
113*4882a593Smuzhiyun`in[0-*]_min`
114*4882a593Smuzhiyun		Voltage min value.
115*4882a593Smuzhiyun
116*4882a593Smuzhiyun		Unit: millivolt
117*4882a593Smuzhiyun
118*4882a593Smuzhiyun		RW
119*4882a593Smuzhiyun
120*4882a593Smuzhiyun`in[0-*]_lcrit`
121*4882a593Smuzhiyun		Voltage critical min value.
122*4882a593Smuzhiyun
123*4882a593Smuzhiyun		Unit: millivolt
124*4882a593Smuzhiyun
125*4882a593Smuzhiyun		RW
126*4882a593Smuzhiyun
127*4882a593Smuzhiyun		If voltage drops to or below this limit, the system may
128*4882a593Smuzhiyun		take drastic action such as power down or reset. At the very
129*4882a593Smuzhiyun		least, it should report a fault.
130*4882a593Smuzhiyun
131*4882a593Smuzhiyun`in[0-*]_max`
132*4882a593Smuzhiyun		Voltage max value.
133*4882a593Smuzhiyun
134*4882a593Smuzhiyun		Unit: millivolt
135*4882a593Smuzhiyun
136*4882a593Smuzhiyun		RW
137*4882a593Smuzhiyun
138*4882a593Smuzhiyun`in[0-*]_crit`
139*4882a593Smuzhiyun		Voltage critical max value.
140*4882a593Smuzhiyun
141*4882a593Smuzhiyun		Unit: millivolt
142*4882a593Smuzhiyun
143*4882a593Smuzhiyun		RW
144*4882a593Smuzhiyun
145*4882a593Smuzhiyun		If voltage reaches or exceeds this limit, the system may
146*4882a593Smuzhiyun		take drastic action such as power down or reset. At the very
147*4882a593Smuzhiyun		least, it should report a fault.
148*4882a593Smuzhiyun
149*4882a593Smuzhiyun`in[0-*]_input`
150*4882a593Smuzhiyun		Voltage input value.
151*4882a593Smuzhiyun
152*4882a593Smuzhiyun		Unit: millivolt
153*4882a593Smuzhiyun
154*4882a593Smuzhiyun		RO
155*4882a593Smuzhiyun
156*4882a593Smuzhiyun		Voltage measured on the chip pin.
157*4882a593Smuzhiyun
158*4882a593Smuzhiyun		Actual voltage depends on the scaling resistors on the
159*4882a593Smuzhiyun		motherboard, as recommended in the chip datasheet.
160*4882a593Smuzhiyun
161*4882a593Smuzhiyun		This varies by chip and by motherboard.
162*4882a593Smuzhiyun		Because of this variation, values are generally NOT scaled
163*4882a593Smuzhiyun		by the chip driver, and must be done by the application.
164*4882a593Smuzhiyun		However, some drivers (notably lm87 and via686a)
165*4882a593Smuzhiyun		do scale, because of internal resistors built into a chip.
166*4882a593Smuzhiyun		These drivers will output the actual voltage. Rule of
167*4882a593Smuzhiyun		thumb: drivers should report the voltage values at the
168*4882a593Smuzhiyun		"pins" of the chip.
169*4882a593Smuzhiyun
170*4882a593Smuzhiyun`in[0-*]_average`
171*4882a593Smuzhiyun		Average voltage
172*4882a593Smuzhiyun
173*4882a593Smuzhiyun		Unit: millivolt
174*4882a593Smuzhiyun
175*4882a593Smuzhiyun		RO
176*4882a593Smuzhiyun
177*4882a593Smuzhiyun`in[0-*]_lowest`
178*4882a593Smuzhiyun		Historical minimum voltage
179*4882a593Smuzhiyun
180*4882a593Smuzhiyun		Unit: millivolt
181*4882a593Smuzhiyun
182*4882a593Smuzhiyun		RO
183*4882a593Smuzhiyun
184*4882a593Smuzhiyun`in[0-*]_highest`
185*4882a593Smuzhiyun		Historical maximum voltage
186*4882a593Smuzhiyun
187*4882a593Smuzhiyun		Unit: millivolt
188*4882a593Smuzhiyun
189*4882a593Smuzhiyun		RO
190*4882a593Smuzhiyun
191*4882a593Smuzhiyun`in[0-*]_reset_history`
192*4882a593Smuzhiyun		Reset inX_lowest and inX_highest
193*4882a593Smuzhiyun
194*4882a593Smuzhiyun		WO
195*4882a593Smuzhiyun
196*4882a593Smuzhiyun`in_reset_history`
197*4882a593Smuzhiyun		Reset inX_lowest and inX_highest for all sensors
198*4882a593Smuzhiyun
199*4882a593Smuzhiyun		WO
200*4882a593Smuzhiyun
201*4882a593Smuzhiyun`in[0-*]_label`
202*4882a593Smuzhiyun		Suggested voltage channel label.
203*4882a593Smuzhiyun
204*4882a593Smuzhiyun		Text string
205*4882a593Smuzhiyun
206*4882a593Smuzhiyun		Should only be created if the driver has hints about what
207*4882a593Smuzhiyun		this voltage channel is being used for, and user-space
208*4882a593Smuzhiyun		doesn't. In all other cases, the label is provided by
209*4882a593Smuzhiyun		user-space.
210*4882a593Smuzhiyun
211*4882a593Smuzhiyun		RO
212*4882a593Smuzhiyun
213*4882a593Smuzhiyun`in[0-*]_enable`
214*4882a593Smuzhiyun		Enable or disable the sensors.
215*4882a593Smuzhiyun
216*4882a593Smuzhiyun		When disabled the sensor read will return -ENODATA.
217*4882a593Smuzhiyun
218*4882a593Smuzhiyun		- 1: Enable
219*4882a593Smuzhiyun		- 0: Disable
220*4882a593Smuzhiyun
221*4882a593Smuzhiyun		RW
222*4882a593Smuzhiyun
223*4882a593Smuzhiyun`cpu[0-*]_vid`
224*4882a593Smuzhiyun		CPU core reference voltage.
225*4882a593Smuzhiyun
226*4882a593Smuzhiyun		Unit: millivolt
227*4882a593Smuzhiyun
228*4882a593Smuzhiyun		RO
229*4882a593Smuzhiyun
230*4882a593Smuzhiyun		Not always correct.
231*4882a593Smuzhiyun
232*4882a593Smuzhiyun`vrm`
233*4882a593Smuzhiyun		Voltage Regulator Module version number.
234*4882a593Smuzhiyun
235*4882a593Smuzhiyun		RW (but changing it should no more be necessary)
236*4882a593Smuzhiyun
237*4882a593Smuzhiyun		Originally the VRM standard version multiplied by 10, but now
238*4882a593Smuzhiyun		an arbitrary number, as not all standards have a version
239*4882a593Smuzhiyun		number.
240*4882a593Smuzhiyun
241*4882a593Smuzhiyun		Affects the way the driver calculates the CPU core reference
242*4882a593Smuzhiyun		voltage from the vid pins.
243*4882a593Smuzhiyun
244*4882a593Smuzhiyun`in[0-*]_rated_min`
245*4882a593Smuzhiyun		Minimum rated voltage.
246*4882a593Smuzhiyun
247*4882a593Smuzhiyun		Unit: millivolt
248*4882a593Smuzhiyun
249*4882a593Smuzhiyun		RO
250*4882a593Smuzhiyun
251*4882a593Smuzhiyun`in[0-*]_rated_max`
252*4882a593Smuzhiyun		Maximum rated voltage.
253*4882a593Smuzhiyun
254*4882a593Smuzhiyun		Unit: millivolt
255*4882a593Smuzhiyun
256*4882a593Smuzhiyun		RO
257*4882a593Smuzhiyun
258*4882a593SmuzhiyunAlso see the Alarms section for status flags associated with voltages.
259*4882a593Smuzhiyun
260*4882a593Smuzhiyun
261*4882a593Smuzhiyun****
262*4882a593SmuzhiyunFans
263*4882a593Smuzhiyun****
264*4882a593Smuzhiyun
265*4882a593Smuzhiyun`fan[1-*]_min`
266*4882a593Smuzhiyun		Fan minimum value
267*4882a593Smuzhiyun
268*4882a593Smuzhiyun		Unit: revolution/min (RPM)
269*4882a593Smuzhiyun
270*4882a593Smuzhiyun		RW
271*4882a593Smuzhiyun
272*4882a593Smuzhiyun`fan[1-*]_max`
273*4882a593Smuzhiyun		Fan maximum value
274*4882a593Smuzhiyun
275*4882a593Smuzhiyun		Unit: revolution/min (RPM)
276*4882a593Smuzhiyun
277*4882a593Smuzhiyun		Only rarely supported by the hardware.
278*4882a593Smuzhiyun		RW
279*4882a593Smuzhiyun
280*4882a593Smuzhiyun`fan[1-*]_input`
281*4882a593Smuzhiyun		Fan input value.
282*4882a593Smuzhiyun
283*4882a593Smuzhiyun		Unit: revolution/min (RPM)
284*4882a593Smuzhiyun
285*4882a593Smuzhiyun		RO
286*4882a593Smuzhiyun
287*4882a593Smuzhiyun`fan[1-*]_div`
288*4882a593Smuzhiyun		Fan divisor.
289*4882a593Smuzhiyun
290*4882a593Smuzhiyun		Integer value in powers of two (1, 2, 4, 8, 16, 32, 64, 128).
291*4882a593Smuzhiyun
292*4882a593Smuzhiyun		RW
293*4882a593Smuzhiyun
294*4882a593Smuzhiyun		Some chips only support values 1, 2, 4 and 8.
295*4882a593Smuzhiyun		Note that this is actually an internal clock divisor, which
296*4882a593Smuzhiyun		affects the measurable speed range, not the read value.
297*4882a593Smuzhiyun
298*4882a593Smuzhiyun`fan[1-*]_pulses`
299*4882a593Smuzhiyun		Number of tachometer pulses per fan revolution.
300*4882a593Smuzhiyun
301*4882a593Smuzhiyun		Integer value, typically between 1 and 4.
302*4882a593Smuzhiyun
303*4882a593Smuzhiyun		RW
304*4882a593Smuzhiyun
305*4882a593Smuzhiyun		This value is a characteristic of the fan connected to the
306*4882a593Smuzhiyun		device's input, so it has to be set in accordance with the fan
307*4882a593Smuzhiyun		model.
308*4882a593Smuzhiyun
309*4882a593Smuzhiyun		Should only be created if the chip has a register to configure
310*4882a593Smuzhiyun		the number of pulses. In the absence of such a register (and
311*4882a593Smuzhiyun		thus attribute) the value assumed by all devices is 2 pulses
312*4882a593Smuzhiyun		per fan revolution.
313*4882a593Smuzhiyun
314*4882a593Smuzhiyun`fan[1-*]_target`
315*4882a593Smuzhiyun		Desired fan speed
316*4882a593Smuzhiyun
317*4882a593Smuzhiyun		Unit: revolution/min (RPM)
318*4882a593Smuzhiyun
319*4882a593Smuzhiyun		RW
320*4882a593Smuzhiyun
321*4882a593Smuzhiyun		Only makes sense if the chip supports closed-loop fan speed
322*4882a593Smuzhiyun		control based on the measured fan speed.
323*4882a593Smuzhiyun
324*4882a593Smuzhiyun`fan[1-*]_label`
325*4882a593Smuzhiyun		Suggested fan channel label.
326*4882a593Smuzhiyun
327*4882a593Smuzhiyun		Text string
328*4882a593Smuzhiyun
329*4882a593Smuzhiyun		Should only be created if the driver has hints about what
330*4882a593Smuzhiyun		this fan channel is being used for, and user-space doesn't.
331*4882a593Smuzhiyun		In all other cases, the label is provided by user-space.
332*4882a593Smuzhiyun
333*4882a593Smuzhiyun		RO
334*4882a593Smuzhiyun
335*4882a593Smuzhiyun`fan[1-*]_enable`
336*4882a593Smuzhiyun		Enable or disable the sensors.
337*4882a593Smuzhiyun
338*4882a593Smuzhiyun		When disabled the sensor read will return -ENODATA.
339*4882a593Smuzhiyun
340*4882a593Smuzhiyun		- 1: Enable
341*4882a593Smuzhiyun		- 0: Disable
342*4882a593Smuzhiyun
343*4882a593Smuzhiyun		RW
344*4882a593Smuzhiyun
345*4882a593SmuzhiyunAlso see the Alarms section for status flags associated with fans.
346*4882a593Smuzhiyun
347*4882a593Smuzhiyun
348*4882a593Smuzhiyun***
349*4882a593SmuzhiyunPWM
350*4882a593Smuzhiyun***
351*4882a593Smuzhiyun
352*4882a593Smuzhiyun`pwm[1-*]`
353*4882a593Smuzhiyun		Pulse width modulation fan control.
354*4882a593Smuzhiyun
355*4882a593Smuzhiyun		Integer value in the range 0 to 255
356*4882a593Smuzhiyun
357*4882a593Smuzhiyun		RW
358*4882a593Smuzhiyun
359*4882a593Smuzhiyun		255 is max or 100%.
360*4882a593Smuzhiyun
361*4882a593Smuzhiyun`pwm[1-*]_enable`
362*4882a593Smuzhiyun		Fan speed control method:
363*4882a593Smuzhiyun
364*4882a593Smuzhiyun		- 0: no fan speed control (i.e. fan at full speed)
365*4882a593Smuzhiyun		- 1: manual fan speed control enabled (using `pwm[1-*]`)
366*4882a593Smuzhiyun		- 2+: automatic fan speed control enabled
367*4882a593Smuzhiyun
368*4882a593Smuzhiyun		Check individual chip documentation files for automatic mode
369*4882a593Smuzhiyun		details.
370*4882a593Smuzhiyun
371*4882a593Smuzhiyun		RW
372*4882a593Smuzhiyun
373*4882a593Smuzhiyun`pwm[1-*]_mode`
374*4882a593Smuzhiyun		- 0: DC mode (direct current)
375*4882a593Smuzhiyun		- 1: PWM mode (pulse-width modulation)
376*4882a593Smuzhiyun
377*4882a593Smuzhiyun		RW
378*4882a593Smuzhiyun
379*4882a593Smuzhiyun`pwm[1-*]_freq`
380*4882a593Smuzhiyun		Base PWM frequency in Hz.
381*4882a593Smuzhiyun
382*4882a593Smuzhiyun		Only possibly available when pwmN_mode is PWM, but not always
383*4882a593Smuzhiyun		present even then.
384*4882a593Smuzhiyun
385*4882a593Smuzhiyun		RW
386*4882a593Smuzhiyun
387*4882a593Smuzhiyun`pwm[1-*]_auto_channels_temp`
388*4882a593Smuzhiyun		Select which temperature channels affect this PWM output in
389*4882a593Smuzhiyun		auto mode.
390*4882a593Smuzhiyun
391*4882a593Smuzhiyun		Bitfield, 1 is temp1, 2 is temp2, 4 is temp3 etc...
392*4882a593Smuzhiyun		Which values are possible depend on the chip used.
393*4882a593Smuzhiyun
394*4882a593Smuzhiyun		RW
395*4882a593Smuzhiyun
396*4882a593Smuzhiyun`pwm[1-*]_auto_point[1-*]_pwm` / `pwm[1-*]_auto_point[1-*]_temp` / `pwm[1-*]_auto_point[1-*]_temp_hyst`
397*4882a593Smuzhiyun		Define the PWM vs temperature curve.
398*4882a593Smuzhiyun
399*4882a593Smuzhiyun		Number of trip points is chip-dependent. Use this for chips
400*4882a593Smuzhiyun		which associate trip points to PWM output channels.
401*4882a593Smuzhiyun
402*4882a593Smuzhiyun		RW
403*4882a593Smuzhiyun
404*4882a593Smuzhiyun`temp[1-*]_auto_point[1-*]_pwm` / `temp[1-*]_auto_point[1-*]_temp` / `temp[1-*]_auto_point[1-*]_temp_hyst`
405*4882a593Smuzhiyun		Define the PWM vs temperature curve.
406*4882a593Smuzhiyun
407*4882a593Smuzhiyun		Number of trip points is chip-dependent. Use this for chips
408*4882a593Smuzhiyun		which associate trip points to temperature channels.
409*4882a593Smuzhiyun
410*4882a593Smuzhiyun		RW
411*4882a593Smuzhiyun
412*4882a593SmuzhiyunThere is a third case where trip points are associated to both PWM output
413*4882a593Smuzhiyunchannels and temperature channels: the PWM values are associated to PWM
414*4882a593Smuzhiyunoutput channels while the temperature values are associated to temperature
415*4882a593Smuzhiyunchannels. In that case, the result is determined by the mapping between
416*4882a593Smuzhiyuntemperature inputs and PWM outputs. When several temperature inputs are
417*4882a593Smuzhiyunmapped to a given PWM output, this leads to several candidate PWM values.
418*4882a593SmuzhiyunThe actual result is up to the chip, but in general the highest candidate
419*4882a593Smuzhiyunvalue (fastest fan speed) wins.
420*4882a593Smuzhiyun
421*4882a593Smuzhiyun
422*4882a593Smuzhiyun************
423*4882a593SmuzhiyunTemperatures
424*4882a593Smuzhiyun************
425*4882a593Smuzhiyun
426*4882a593Smuzhiyun`temp[1-*]_type`
427*4882a593Smuzhiyun		Sensor type selection.
428*4882a593Smuzhiyun
429*4882a593Smuzhiyun		Integers 1 to 6
430*4882a593Smuzhiyun
431*4882a593Smuzhiyun		RW
432*4882a593Smuzhiyun
433*4882a593Smuzhiyun		- 1: CPU embedded diode
434*4882a593Smuzhiyun		- 2: 3904 transistor
435*4882a593Smuzhiyun		- 3: thermal diode
436*4882a593Smuzhiyun		- 4: thermistor
437*4882a593Smuzhiyun		- 5: AMD AMDSI
438*4882a593Smuzhiyun		- 6: Intel PECI
439*4882a593Smuzhiyun
440*4882a593Smuzhiyun		Not all types are supported by all chips
441*4882a593Smuzhiyun
442*4882a593Smuzhiyun`temp[1-*]_max`
443*4882a593Smuzhiyun		Temperature max value.
444*4882a593Smuzhiyun
445*4882a593Smuzhiyun		Unit: millidegree Celsius (or millivolt, see below)
446*4882a593Smuzhiyun
447*4882a593Smuzhiyun		RW
448*4882a593Smuzhiyun
449*4882a593Smuzhiyun`temp[1-*]_min`
450*4882a593Smuzhiyun		Temperature min value.
451*4882a593Smuzhiyun
452*4882a593Smuzhiyun		Unit: millidegree Celsius
453*4882a593Smuzhiyun
454*4882a593Smuzhiyun		RW
455*4882a593Smuzhiyun
456*4882a593Smuzhiyun`temp[1-*]_max_hyst`
457*4882a593Smuzhiyun		Temperature hysteresis value for max limit.
458*4882a593Smuzhiyun
459*4882a593Smuzhiyun		Unit: millidegree Celsius
460*4882a593Smuzhiyun
461*4882a593Smuzhiyun		Must be reported as an absolute temperature, NOT a delta
462*4882a593Smuzhiyun		from the max value.
463*4882a593Smuzhiyun
464*4882a593Smuzhiyun		RW
465*4882a593Smuzhiyun
466*4882a593Smuzhiyun`temp[1-*]_min_hyst`
467*4882a593Smuzhiyun		Temperature hysteresis value for min limit.
468*4882a593Smuzhiyun		Unit: millidegree Celsius
469*4882a593Smuzhiyun
470*4882a593Smuzhiyun		Must be reported as an absolute temperature, NOT a delta
471*4882a593Smuzhiyun		from the min value.
472*4882a593Smuzhiyun
473*4882a593Smuzhiyun		RW
474*4882a593Smuzhiyun
475*4882a593Smuzhiyun`temp[1-*]_input`
476*4882a593Smuzhiyun	 Temperature input value.
477*4882a593Smuzhiyun
478*4882a593Smuzhiyun		Unit: millidegree Celsius
479*4882a593Smuzhiyun
480*4882a593Smuzhiyun		RO
481*4882a593Smuzhiyun
482*4882a593Smuzhiyun`temp[1-*]_crit`
483*4882a593Smuzhiyun		Temperature critical max value, typically greater than
484*4882a593Smuzhiyun		corresponding temp_max values.
485*4882a593Smuzhiyun
486*4882a593Smuzhiyun		Unit: millidegree Celsius
487*4882a593Smuzhiyun
488*4882a593Smuzhiyun		RW
489*4882a593Smuzhiyun
490*4882a593Smuzhiyun`temp[1-*]_crit_hyst`
491*4882a593Smuzhiyun		Temperature hysteresis value for critical limit.
492*4882a593Smuzhiyun
493*4882a593Smuzhiyun		Unit: millidegree Celsius
494*4882a593Smuzhiyun
495*4882a593Smuzhiyun		Must be reported as an absolute temperature, NOT a delta
496*4882a593Smuzhiyun		from the critical value.
497*4882a593Smuzhiyun
498*4882a593Smuzhiyun		RW
499*4882a593Smuzhiyun
500*4882a593Smuzhiyun`temp[1-*]_emergency`
501*4882a593Smuzhiyun		Temperature emergency max value, for chips supporting more than
502*4882a593Smuzhiyun		two upper temperature limits. Must be equal or greater than
503*4882a593Smuzhiyun		corresponding temp_crit values.
504*4882a593Smuzhiyun
505*4882a593Smuzhiyun		Unit: millidegree Celsius
506*4882a593Smuzhiyun
507*4882a593Smuzhiyun		RW
508*4882a593Smuzhiyun
509*4882a593Smuzhiyun`temp[1-*]_emergency_hyst`
510*4882a593Smuzhiyun		Temperature hysteresis value for emergency limit.
511*4882a593Smuzhiyun
512*4882a593Smuzhiyun		Unit: millidegree Celsius
513*4882a593Smuzhiyun
514*4882a593Smuzhiyun		Must be reported as an absolute temperature, NOT a delta
515*4882a593Smuzhiyun		from the emergency value.
516*4882a593Smuzhiyun
517*4882a593Smuzhiyun		RW
518*4882a593Smuzhiyun
519*4882a593Smuzhiyun`temp[1-*]_lcrit`
520*4882a593Smuzhiyun		Temperature critical min value, typically lower than
521*4882a593Smuzhiyun		corresponding temp_min values.
522*4882a593Smuzhiyun
523*4882a593Smuzhiyun		Unit: millidegree Celsius
524*4882a593Smuzhiyun
525*4882a593Smuzhiyun		RW
526*4882a593Smuzhiyun
527*4882a593Smuzhiyun`temp[1-*]_lcrit_hyst`
528*4882a593Smuzhiyun		Temperature hysteresis value for critical min limit.
529*4882a593Smuzhiyun
530*4882a593Smuzhiyun		Unit: millidegree Celsius
531*4882a593Smuzhiyun
532*4882a593Smuzhiyun		Must be reported as an absolute temperature, NOT a delta
533*4882a593Smuzhiyun		from the critical min value.
534*4882a593Smuzhiyun
535*4882a593Smuzhiyun		RW
536*4882a593Smuzhiyun
537*4882a593Smuzhiyun`temp[1-*]_offset`
538*4882a593Smuzhiyun		Temperature offset which is added to the temperature reading
539*4882a593Smuzhiyun		by the chip.
540*4882a593Smuzhiyun
541*4882a593Smuzhiyun		Unit: millidegree Celsius
542*4882a593Smuzhiyun
543*4882a593Smuzhiyun		Read/Write value.
544*4882a593Smuzhiyun
545*4882a593Smuzhiyun`temp[1-*]_label`
546*4882a593Smuzhiyun		Suggested temperature channel label.
547*4882a593Smuzhiyun
548*4882a593Smuzhiyun		Text string
549*4882a593Smuzhiyun
550*4882a593Smuzhiyun		Should only be created if the driver has hints about what
551*4882a593Smuzhiyun		this temperature channel is being used for, and user-space
552*4882a593Smuzhiyun		doesn't. In all other cases, the label is provided by
553*4882a593Smuzhiyun		user-space.
554*4882a593Smuzhiyun
555*4882a593Smuzhiyun		RO
556*4882a593Smuzhiyun
557*4882a593Smuzhiyun`temp[1-*]_lowest`
558*4882a593Smuzhiyun		Historical minimum temperature
559*4882a593Smuzhiyun
560*4882a593Smuzhiyun		Unit: millidegree Celsius
561*4882a593Smuzhiyun
562*4882a593Smuzhiyun		RO
563*4882a593Smuzhiyun
564*4882a593Smuzhiyun`temp[1-*]_highest`
565*4882a593Smuzhiyun		Historical maximum temperature
566*4882a593Smuzhiyun
567*4882a593Smuzhiyun		Unit: millidegree Celsius
568*4882a593Smuzhiyun
569*4882a593Smuzhiyun		RO
570*4882a593Smuzhiyun
571*4882a593Smuzhiyun`temp[1-*]_reset_history`
572*4882a593Smuzhiyun		Reset temp_lowest and temp_highest
573*4882a593Smuzhiyun
574*4882a593Smuzhiyun		WO
575*4882a593Smuzhiyun
576*4882a593Smuzhiyun`temp_reset_history`
577*4882a593Smuzhiyun		Reset temp_lowest and temp_highest for all sensors
578*4882a593Smuzhiyun
579*4882a593Smuzhiyun		WO
580*4882a593Smuzhiyun
581*4882a593Smuzhiyun`temp[1-*]_enable`
582*4882a593Smuzhiyun		Enable or disable the sensors.
583*4882a593Smuzhiyun
584*4882a593Smuzhiyun		When disabled the sensor read will return -ENODATA.
585*4882a593Smuzhiyun
586*4882a593Smuzhiyun		- 1: Enable
587*4882a593Smuzhiyun		- 0: Disable
588*4882a593Smuzhiyun
589*4882a593Smuzhiyun		RW
590*4882a593Smuzhiyun
591*4882a593Smuzhiyun`temp[1-*]_rated_min`
592*4882a593Smuzhiyun		Minimum rated temperature.
593*4882a593Smuzhiyun
594*4882a593Smuzhiyun		Unit: millidegree Celsius
595*4882a593Smuzhiyun
596*4882a593Smuzhiyun		RO
597*4882a593Smuzhiyun
598*4882a593Smuzhiyun`temp[1-*]_rated_max`
599*4882a593Smuzhiyun		Maximum rated temperature.
600*4882a593Smuzhiyun
601*4882a593Smuzhiyun		Unit: millidegree Celsius
602*4882a593Smuzhiyun
603*4882a593Smuzhiyun		RO
604*4882a593Smuzhiyun
605*4882a593SmuzhiyunSome chips measure temperature using external thermistors and an ADC, and
606*4882a593Smuzhiyunreport the temperature measurement as a voltage. Converting this voltage
607*4882a593Smuzhiyunback to a temperature (or the other way around for limits) requires
608*4882a593Smuzhiyunmathematical functions not available in the kernel, so the conversion
609*4882a593Smuzhiyunmust occur in user space. For these chips, all temp* files described
610*4882a593Smuzhiyunabove should contain values expressed in millivolt instead of millidegree
611*4882a593SmuzhiyunCelsius. In other words, such temperature channels are handled as voltage
612*4882a593Smuzhiyunchannels by the driver.
613*4882a593Smuzhiyun
614*4882a593SmuzhiyunAlso see the Alarms section for status flags associated with temperatures.
615*4882a593Smuzhiyun
616*4882a593Smuzhiyun
617*4882a593Smuzhiyun********
618*4882a593SmuzhiyunCurrents
619*4882a593Smuzhiyun********
620*4882a593Smuzhiyun
621*4882a593Smuzhiyun`curr[1-*]_max`
622*4882a593Smuzhiyun		Current max value
623*4882a593Smuzhiyun
624*4882a593Smuzhiyun		Unit: milliampere
625*4882a593Smuzhiyun
626*4882a593Smuzhiyun		RW
627*4882a593Smuzhiyun
628*4882a593Smuzhiyun`curr[1-*]_min`
629*4882a593Smuzhiyun		Current min value.
630*4882a593Smuzhiyun
631*4882a593Smuzhiyun		Unit: milliampere
632*4882a593Smuzhiyun
633*4882a593Smuzhiyun		RW
634*4882a593Smuzhiyun
635*4882a593Smuzhiyun`curr[1-*]_lcrit`
636*4882a593Smuzhiyun		Current critical low value
637*4882a593Smuzhiyun
638*4882a593Smuzhiyun		Unit: milliampere
639*4882a593Smuzhiyun
640*4882a593Smuzhiyun		RW
641*4882a593Smuzhiyun
642*4882a593Smuzhiyun`curr[1-*]_crit`
643*4882a593Smuzhiyun		Current critical high value.
644*4882a593Smuzhiyun
645*4882a593Smuzhiyun		Unit: milliampere
646*4882a593Smuzhiyun
647*4882a593Smuzhiyun		RW
648*4882a593Smuzhiyun
649*4882a593Smuzhiyun`curr[1-*]_input`
650*4882a593Smuzhiyun		Current input value
651*4882a593Smuzhiyun
652*4882a593Smuzhiyun		Unit: milliampere
653*4882a593Smuzhiyun
654*4882a593Smuzhiyun		RO
655*4882a593Smuzhiyun
656*4882a593Smuzhiyun`curr[1-*]_average`
657*4882a593Smuzhiyun		Average current use
658*4882a593Smuzhiyun
659*4882a593Smuzhiyun		Unit: milliampere
660*4882a593Smuzhiyun
661*4882a593Smuzhiyun		RO
662*4882a593Smuzhiyun
663*4882a593Smuzhiyun`curr[1-*]_lowest`
664*4882a593Smuzhiyun		Historical minimum current
665*4882a593Smuzhiyun
666*4882a593Smuzhiyun		Unit: milliampere
667*4882a593Smuzhiyun
668*4882a593Smuzhiyun		RO
669*4882a593Smuzhiyun
670*4882a593Smuzhiyun`curr[1-*]_highest`
671*4882a593Smuzhiyun		Historical maximum current
672*4882a593Smuzhiyun		Unit: milliampere
673*4882a593Smuzhiyun		RO
674*4882a593Smuzhiyun
675*4882a593Smuzhiyun`curr[1-*]_reset_history`
676*4882a593Smuzhiyun		Reset currX_lowest and currX_highest
677*4882a593Smuzhiyun
678*4882a593Smuzhiyun		WO
679*4882a593Smuzhiyun
680*4882a593Smuzhiyun`curr_reset_history`
681*4882a593Smuzhiyun		Reset currX_lowest and currX_highest for all sensors
682*4882a593Smuzhiyun
683*4882a593Smuzhiyun		WO
684*4882a593Smuzhiyun
685*4882a593Smuzhiyun`curr[1-*]_enable`
686*4882a593Smuzhiyun		Enable or disable the sensors.
687*4882a593Smuzhiyun
688*4882a593Smuzhiyun		When disabled the sensor read will return -ENODATA.
689*4882a593Smuzhiyun
690*4882a593Smuzhiyun		- 1: Enable
691*4882a593Smuzhiyun		- 0: Disable
692*4882a593Smuzhiyun
693*4882a593Smuzhiyun		RW
694*4882a593Smuzhiyun
695*4882a593Smuzhiyun`curr[1-*]_rated_min`
696*4882a593Smuzhiyun		Minimum rated current.
697*4882a593Smuzhiyun
698*4882a593Smuzhiyun		Unit: milliampere
699*4882a593Smuzhiyun
700*4882a593Smuzhiyun		RO
701*4882a593Smuzhiyun
702*4882a593Smuzhiyun`curr[1-*]_rated_max`
703*4882a593Smuzhiyun		Maximum rated current.
704*4882a593Smuzhiyun
705*4882a593Smuzhiyun		Unit: milliampere
706*4882a593Smuzhiyun
707*4882a593Smuzhiyun		RO
708*4882a593Smuzhiyun
709*4882a593SmuzhiyunAlso see the Alarms section for status flags associated with currents.
710*4882a593Smuzhiyun
711*4882a593Smuzhiyun*****
712*4882a593SmuzhiyunPower
713*4882a593Smuzhiyun*****
714*4882a593Smuzhiyun
715*4882a593Smuzhiyun`power[1-*]_average`
716*4882a593Smuzhiyun				Average power use
717*4882a593Smuzhiyun
718*4882a593Smuzhiyun				Unit: microWatt
719*4882a593Smuzhiyun
720*4882a593Smuzhiyun				RO
721*4882a593Smuzhiyun
722*4882a593Smuzhiyun`power[1-*]_average_interval`
723*4882a593Smuzhiyun				Power use averaging interval.  A poll
724*4882a593Smuzhiyun				notification is sent to this file if the
725*4882a593Smuzhiyun				hardware changes the averaging interval.
726*4882a593Smuzhiyun
727*4882a593Smuzhiyun				Unit: milliseconds
728*4882a593Smuzhiyun
729*4882a593Smuzhiyun				RW
730*4882a593Smuzhiyun
731*4882a593Smuzhiyun`power[1-*]_average_interval_max`
732*4882a593Smuzhiyun				Maximum power use averaging interval
733*4882a593Smuzhiyun
734*4882a593Smuzhiyun				Unit: milliseconds
735*4882a593Smuzhiyun
736*4882a593Smuzhiyun				RO
737*4882a593Smuzhiyun
738*4882a593Smuzhiyun`power[1-*]_average_interval_min`
739*4882a593Smuzhiyun				Minimum power use averaging interval
740*4882a593Smuzhiyun
741*4882a593Smuzhiyun				Unit: milliseconds
742*4882a593Smuzhiyun
743*4882a593Smuzhiyun				RO
744*4882a593Smuzhiyun
745*4882a593Smuzhiyun`power[1-*]_average_highest`
746*4882a593Smuzhiyun				Historical average maximum power use
747*4882a593Smuzhiyun
748*4882a593Smuzhiyun				Unit: microWatt
749*4882a593Smuzhiyun
750*4882a593Smuzhiyun				RO
751*4882a593Smuzhiyun
752*4882a593Smuzhiyun`power[1-*]_average_lowest`
753*4882a593Smuzhiyun				Historical average minimum power use
754*4882a593Smuzhiyun
755*4882a593Smuzhiyun				Unit: microWatt
756*4882a593Smuzhiyun
757*4882a593Smuzhiyun				RO
758*4882a593Smuzhiyun
759*4882a593Smuzhiyun`power[1-*]_average_max`
760*4882a593Smuzhiyun				A poll notification is sent to
761*4882a593Smuzhiyun				`power[1-*]_average` when power use
762*4882a593Smuzhiyun				rises above this value.
763*4882a593Smuzhiyun
764*4882a593Smuzhiyun				Unit: microWatt
765*4882a593Smuzhiyun
766*4882a593Smuzhiyun				RW
767*4882a593Smuzhiyun
768*4882a593Smuzhiyun`power[1-*]_average_min`
769*4882a593Smuzhiyun				A poll notification is sent to
770*4882a593Smuzhiyun				`power[1-*]_average` when power use
771*4882a593Smuzhiyun				sinks below this value.
772*4882a593Smuzhiyun
773*4882a593Smuzhiyun				Unit: microWatt
774*4882a593Smuzhiyun
775*4882a593Smuzhiyun				RW
776*4882a593Smuzhiyun
777*4882a593Smuzhiyun`power[1-*]_input`
778*4882a593Smuzhiyun				Instantaneous power use
779*4882a593Smuzhiyun
780*4882a593Smuzhiyun				Unit: microWatt
781*4882a593Smuzhiyun
782*4882a593Smuzhiyun				RO
783*4882a593Smuzhiyun
784*4882a593Smuzhiyun`power[1-*]_input_highest`
785*4882a593Smuzhiyun				Historical maximum power use
786*4882a593Smuzhiyun
787*4882a593Smuzhiyun				Unit: microWatt
788*4882a593Smuzhiyun
789*4882a593Smuzhiyun				RO
790*4882a593Smuzhiyun
791*4882a593Smuzhiyun`power[1-*]_input_lowest`
792*4882a593Smuzhiyun				Historical minimum power use
793*4882a593Smuzhiyun
794*4882a593Smuzhiyun				Unit: microWatt
795*4882a593Smuzhiyun
796*4882a593Smuzhiyun				RO
797*4882a593Smuzhiyun
798*4882a593Smuzhiyun`power[1-*]_reset_history`
799*4882a593Smuzhiyun				Reset input_highest, input_lowest,
800*4882a593Smuzhiyun				average_highest and average_lowest.
801*4882a593Smuzhiyun
802*4882a593Smuzhiyun				WO
803*4882a593Smuzhiyun
804*4882a593Smuzhiyun`power[1-*]_accuracy`
805*4882a593Smuzhiyun				Accuracy of the power meter.
806*4882a593Smuzhiyun
807*4882a593Smuzhiyun				Unit: Percent
808*4882a593Smuzhiyun
809*4882a593Smuzhiyun				RO
810*4882a593Smuzhiyun
811*4882a593Smuzhiyun`power[1-*]_cap`
812*4882a593Smuzhiyun				If power use rises above this limit, the
813*4882a593Smuzhiyun				system should take action to reduce power use.
814*4882a593Smuzhiyun				A poll notification is sent to this file if the
815*4882a593Smuzhiyun				cap is changed by the hardware.  The `*_cap`
816*4882a593Smuzhiyun				files only appear if the cap is known to be
817*4882a593Smuzhiyun				enforced by hardware.
818*4882a593Smuzhiyun
819*4882a593Smuzhiyun				Unit: microWatt
820*4882a593Smuzhiyun
821*4882a593Smuzhiyun				RW
822*4882a593Smuzhiyun
823*4882a593Smuzhiyun`power[1-*]_cap_hyst`
824*4882a593Smuzhiyun				Margin of hysteresis built around capping and
825*4882a593Smuzhiyun				notification.
826*4882a593Smuzhiyun
827*4882a593Smuzhiyun				Unit: microWatt
828*4882a593Smuzhiyun
829*4882a593Smuzhiyun				RW
830*4882a593Smuzhiyun
831*4882a593Smuzhiyun`power[1-*]_cap_max`
832*4882a593Smuzhiyun				Maximum cap that can be set.
833*4882a593Smuzhiyun
834*4882a593Smuzhiyun				Unit: microWatt
835*4882a593Smuzhiyun
836*4882a593Smuzhiyun				RO
837*4882a593Smuzhiyun
838*4882a593Smuzhiyun`power[1-*]_cap_min`
839*4882a593Smuzhiyun				Minimum cap that can be set.
840*4882a593Smuzhiyun
841*4882a593Smuzhiyun				Unit: microWatt
842*4882a593Smuzhiyun
843*4882a593Smuzhiyun				RO
844*4882a593Smuzhiyun
845*4882a593Smuzhiyun`power[1-*]_max`
846*4882a593Smuzhiyun				Maximum power.
847*4882a593Smuzhiyun
848*4882a593Smuzhiyun				Unit: microWatt
849*4882a593Smuzhiyun
850*4882a593Smuzhiyun				RW
851*4882a593Smuzhiyun
852*4882a593Smuzhiyun`power[1-*]_crit`
853*4882a593Smuzhiyun				Critical maximum power.
854*4882a593Smuzhiyun
855*4882a593Smuzhiyun				If power rises to or above this limit, the
856*4882a593Smuzhiyun				system is expected take drastic action to reduce
857*4882a593Smuzhiyun				power consumption, such as a system shutdown or
858*4882a593Smuzhiyun				a forced powerdown of some devices.
859*4882a593Smuzhiyun
860*4882a593Smuzhiyun				Unit: microWatt
861*4882a593Smuzhiyun
862*4882a593Smuzhiyun				RW
863*4882a593Smuzhiyun
864*4882a593Smuzhiyun`power[1-*]_enable`
865*4882a593Smuzhiyun				Enable or disable the sensors.
866*4882a593Smuzhiyun
867*4882a593Smuzhiyun				When disabled the sensor read will return
868*4882a593Smuzhiyun				-ENODATA.
869*4882a593Smuzhiyun
870*4882a593Smuzhiyun				- 1: Enable
871*4882a593Smuzhiyun				- 0: Disable
872*4882a593Smuzhiyun
873*4882a593Smuzhiyun				RW
874*4882a593Smuzhiyun
875*4882a593Smuzhiyun`power[1-*]_rated_min`
876*4882a593Smuzhiyun				Minimum rated power.
877*4882a593Smuzhiyun
878*4882a593Smuzhiyun				Unit: microWatt
879*4882a593Smuzhiyun
880*4882a593Smuzhiyun				RO
881*4882a593Smuzhiyun
882*4882a593Smuzhiyun`power[1-*]_rated_max`
883*4882a593Smuzhiyun				Maximum rated power.
884*4882a593Smuzhiyun
885*4882a593Smuzhiyun				Unit: microWatt
886*4882a593Smuzhiyun
887*4882a593Smuzhiyun				RO
888*4882a593Smuzhiyun
889*4882a593SmuzhiyunAlso see the Alarms section for status flags associated with power readings.
890*4882a593Smuzhiyun
891*4882a593Smuzhiyun******
892*4882a593SmuzhiyunEnergy
893*4882a593Smuzhiyun******
894*4882a593Smuzhiyun
895*4882a593Smuzhiyun`energy[1-*]_input`
896*4882a593Smuzhiyun				Cumulative energy use
897*4882a593Smuzhiyun
898*4882a593Smuzhiyun				Unit: microJoule
899*4882a593Smuzhiyun
900*4882a593Smuzhiyun				RO
901*4882a593Smuzhiyun
902*4882a593Smuzhiyun`energy[1-*]_enable`
903*4882a593Smuzhiyun				Enable or disable the sensors.
904*4882a593Smuzhiyun
905*4882a593Smuzhiyun				When disabled the sensor read will return
906*4882a593Smuzhiyun				-ENODATA.
907*4882a593Smuzhiyun
908*4882a593Smuzhiyun				- 1: Enable
909*4882a593Smuzhiyun				- 0: Disable
910*4882a593Smuzhiyun
911*4882a593Smuzhiyun				RW
912*4882a593Smuzhiyun
913*4882a593Smuzhiyun********
914*4882a593SmuzhiyunHumidity
915*4882a593Smuzhiyun********
916*4882a593Smuzhiyun
917*4882a593Smuzhiyun`humidity[1-*]_input`
918*4882a593Smuzhiyun				Humidity
919*4882a593Smuzhiyun
920*4882a593Smuzhiyun				Unit: milli-percent (per cent mille, pcm)
921*4882a593Smuzhiyun
922*4882a593Smuzhiyun				RO
923*4882a593Smuzhiyun
924*4882a593Smuzhiyun
925*4882a593Smuzhiyun`humidity[1-*]_enable`
926*4882a593Smuzhiyun				Enable or disable the sensors
927*4882a593Smuzhiyun
928*4882a593Smuzhiyun				When disabled the sensor read will return
929*4882a593Smuzhiyun				-ENODATA.
930*4882a593Smuzhiyun
931*4882a593Smuzhiyun				- 1: Enable
932*4882a593Smuzhiyun				- 0: Disable
933*4882a593Smuzhiyun
934*4882a593Smuzhiyun				RW
935*4882a593Smuzhiyun
936*4882a593Smuzhiyun`humidity[1-*]_rated_min`
937*4882a593Smuzhiyun				Minimum rated humidity.
938*4882a593Smuzhiyun
939*4882a593Smuzhiyun				Unit: milli-percent (per cent mille, pcm)
940*4882a593Smuzhiyun
941*4882a593Smuzhiyun				RO
942*4882a593Smuzhiyun
943*4882a593Smuzhiyun`humidity[1-*]_rated_max`
944*4882a593Smuzhiyun				Maximum rated humidity.
945*4882a593Smuzhiyun
946*4882a593Smuzhiyun				Unit: milli-percent (per cent mille, pcm)
947*4882a593Smuzhiyun
948*4882a593Smuzhiyun				RO
949*4882a593Smuzhiyun
950*4882a593Smuzhiyun******
951*4882a593SmuzhiyunAlarms
952*4882a593Smuzhiyun******
953*4882a593Smuzhiyun
954*4882a593SmuzhiyunEach channel or limit may have an associated alarm file, containing a
955*4882a593Smuzhiyunboolean value. 1 means than an alarm condition exists, 0 means no alarm.
956*4882a593Smuzhiyun
957*4882a593SmuzhiyunUsually a given chip will either use channel-related alarms, or
958*4882a593Smuzhiyunlimit-related alarms, not both. The driver should just reflect the hardware
959*4882a593Smuzhiyunimplementation.
960*4882a593Smuzhiyun
961*4882a593Smuzhiyun+-------------------------------+-----------------------+
962*4882a593Smuzhiyun| **`in[0-*]_alarm`,		| Channel alarm		|
963*4882a593Smuzhiyun| `curr[1-*]_alarm`,		|			|
964*4882a593Smuzhiyun| `power[1-*]_alarm`,		|   - 0: no alarm	|
965*4882a593Smuzhiyun| `fan[1-*]_alarm`,		|   - 1: alarm		|
966*4882a593Smuzhiyun| `temp[1-*]_alarm`**		|			|
967*4882a593Smuzhiyun|				|   RO			|
968*4882a593Smuzhiyun+-------------------------------+-----------------------+
969*4882a593Smuzhiyun
970*4882a593Smuzhiyun**OR**
971*4882a593Smuzhiyun
972*4882a593Smuzhiyun+-------------------------------+-----------------------+
973*4882a593Smuzhiyun| **`in[0-*]_min_alarm`,	| Limit alarm		|
974*4882a593Smuzhiyun| `in[0-*]_max_alarm`,		|			|
975*4882a593Smuzhiyun| `in[0-*]_lcrit_alarm`,	|   - 0: no alarm	|
976*4882a593Smuzhiyun| `in[0-*]_crit_alarm`,		|   - 1: alarm		|
977*4882a593Smuzhiyun| `curr[1-*]_min_alarm`,	|			|
978*4882a593Smuzhiyun| `curr[1-*]_max_alarm`,	| RO			|
979*4882a593Smuzhiyun| `curr[1-*]_lcrit_alarm`,	|			|
980*4882a593Smuzhiyun| `curr[1-*]_crit_alarm`,	|			|
981*4882a593Smuzhiyun| `power[1-*]_cap_alarm`,	|			|
982*4882a593Smuzhiyun| `power[1-*]_max_alarm`,	|			|
983*4882a593Smuzhiyun| `power[1-*]_crit_alarm`,	|			|
984*4882a593Smuzhiyun| `fan[1-*]_min_alarm`,		|			|
985*4882a593Smuzhiyun| `fan[1-*]_max_alarm`,		|			|
986*4882a593Smuzhiyun| `temp[1-*]_min_alarm`,	|			|
987*4882a593Smuzhiyun| `temp[1-*]_max_alarm`,	|			|
988*4882a593Smuzhiyun| `temp[1-*]_lcrit_alarm`,	|			|
989*4882a593Smuzhiyun| `temp[1-*]_crit_alarm`,	|			|
990*4882a593Smuzhiyun| `temp[1-*]_emergency_alarm`**	|			|
991*4882a593Smuzhiyun+-------------------------------+-----------------------+
992*4882a593Smuzhiyun
993*4882a593SmuzhiyunEach input channel may have an associated fault file. This can be used
994*4882a593Smuzhiyunto notify open diodes, unconnected fans etc. where the hardware
995*4882a593Smuzhiyunsupports it. When this boolean has value 1, the measurement for that
996*4882a593Smuzhiyunchannel should not be trusted.
997*4882a593Smuzhiyun
998*4882a593Smuzhiyun`fan[1-*]_fault` / `temp[1-*]_fault`
999*4882a593Smuzhiyun		Input fault condition
1000*4882a593Smuzhiyun
1001*4882a593Smuzhiyun		- 0: no fault occurred
1002*4882a593Smuzhiyun		- 1: fault condition
1003*4882a593Smuzhiyun
1004*4882a593Smuzhiyun		RO
1005*4882a593Smuzhiyun
1006*4882a593SmuzhiyunSome chips also offer the possibility to get beeped when an alarm occurs:
1007*4882a593Smuzhiyun
1008*4882a593Smuzhiyun`beep_enable`
1009*4882a593Smuzhiyun		Master beep enable
1010*4882a593Smuzhiyun
1011*4882a593Smuzhiyun		- 0: no beeps
1012*4882a593Smuzhiyun		- 1: beeps
1013*4882a593Smuzhiyun
1014*4882a593Smuzhiyun		RW
1015*4882a593Smuzhiyun
1016*4882a593Smuzhiyun`in[0-*]_beep`, `curr[1-*]_beep`, `fan[1-*]_beep`, `temp[1-*]_beep`,
1017*4882a593Smuzhiyun		Channel beep
1018*4882a593Smuzhiyun
1019*4882a593Smuzhiyun		- 0: disable
1020*4882a593Smuzhiyun		- 1: enable
1021*4882a593Smuzhiyun
1022*4882a593Smuzhiyun		RW
1023*4882a593Smuzhiyun
1024*4882a593SmuzhiyunIn theory, a chip could provide per-limit beep masking, but no such chip
1025*4882a593Smuzhiyunwas seen so far.
1026*4882a593Smuzhiyun
1027*4882a593SmuzhiyunOld drivers provided a different, non-standard interface to alarms and
1028*4882a593Smuzhiyunbeeps. These interface files are deprecated, but will be kept around
1029*4882a593Smuzhiyunfor compatibility reasons:
1030*4882a593Smuzhiyun
1031*4882a593Smuzhiyun`alarms`
1032*4882a593Smuzhiyun		Alarm bitmask.
1033*4882a593Smuzhiyun
1034*4882a593Smuzhiyun		RO
1035*4882a593Smuzhiyun
1036*4882a593Smuzhiyun		Integer representation of one to four bytes.
1037*4882a593Smuzhiyun
1038*4882a593Smuzhiyun		A '1' bit means an alarm.
1039*4882a593Smuzhiyun
1040*4882a593Smuzhiyun		Chips should be programmed for 'comparator' mode so that
1041*4882a593Smuzhiyun		the alarm will 'come back' after you read the register
1042*4882a593Smuzhiyun		if it is still valid.
1043*4882a593Smuzhiyun
1044*4882a593Smuzhiyun		Generally a direct representation of a chip's internal
1045*4882a593Smuzhiyun		alarm registers; there is no standard for the position
1046*4882a593Smuzhiyun		of individual bits. For this reason, the use of this
1047*4882a593Smuzhiyun		interface file for new drivers is discouraged. Use
1048*4882a593Smuzhiyun		`individual *_alarm` and `*_fault` files instead.
1049*4882a593Smuzhiyun		Bits are defined in kernel/include/sensors.h.
1050*4882a593Smuzhiyun
1051*4882a593Smuzhiyun`beep_mask`
1052*4882a593Smuzhiyun		Bitmask for beep.
1053*4882a593Smuzhiyun		Same format as 'alarms' with the same bit locations,
1054*4882a593Smuzhiyun		use discouraged for the same reason. Use individual
1055*4882a593Smuzhiyun		`*_beep` files instead.
1056*4882a593Smuzhiyun		RW
1057*4882a593Smuzhiyun
1058*4882a593Smuzhiyun
1059*4882a593Smuzhiyun*******************
1060*4882a593SmuzhiyunIntrusion detection
1061*4882a593Smuzhiyun*******************
1062*4882a593Smuzhiyun
1063*4882a593Smuzhiyun`intrusion[0-*]_alarm`
1064*4882a593Smuzhiyun		Chassis intrusion detection
1065*4882a593Smuzhiyun
1066*4882a593Smuzhiyun		- 0: OK
1067*4882a593Smuzhiyun		- 1: intrusion detected
1068*4882a593Smuzhiyun
1069*4882a593Smuzhiyun		RW
1070*4882a593Smuzhiyun
1071*4882a593Smuzhiyun		Contrary to regular alarm flags which clear themselves
1072*4882a593Smuzhiyun		automatically when read, this one sticks until cleared by
1073*4882a593Smuzhiyun		the user. This is done by writing 0 to the file. Writing
1074*4882a593Smuzhiyun		other values is unsupported.
1075*4882a593Smuzhiyun
1076*4882a593Smuzhiyun`intrusion[0-*]_beep`
1077*4882a593Smuzhiyun		Chassis intrusion beep
1078*4882a593Smuzhiyun
1079*4882a593Smuzhiyun		0: disable
1080*4882a593Smuzhiyun		1: enable
1081*4882a593Smuzhiyun
1082*4882a593Smuzhiyun		RW
1083*4882a593Smuzhiyun
1084*4882a593Smuzhiyun****************************
1085*4882a593SmuzhiyunAverage sample configuration
1086*4882a593Smuzhiyun****************************
1087*4882a593Smuzhiyun
1088*4882a593SmuzhiyunDevices allowing for reading {in,power,curr,temp}_average values may export
1089*4882a593Smuzhiyunattributes for controlling number of samples used to compute average.
1090*4882a593Smuzhiyun
1091*4882a593Smuzhiyun+--------------+---------------------------------------------------------------+
1092*4882a593Smuzhiyun| samples      | Sets number of average samples for all types of measurements. |
1093*4882a593Smuzhiyun|	       |							       |
1094*4882a593Smuzhiyun|	       | RW							       |
1095*4882a593Smuzhiyun+--------------+---------------------------------------------------------------+
1096*4882a593Smuzhiyun| in_samples   | Sets number of average samples for specific type of	       |
1097*4882a593Smuzhiyun| power_samples| measurements.						       |
1098*4882a593Smuzhiyun| curr_samples |							       |
1099*4882a593Smuzhiyun| temp_samples | Note that on some devices it won't be possible to set all of  |
1100*4882a593Smuzhiyun|	       | them to different values so changing one might also change    |
1101*4882a593Smuzhiyun|	       | some others.						       |
1102*4882a593Smuzhiyun|	       |							       |
1103*4882a593Smuzhiyun|	       | RW							       |
1104*4882a593Smuzhiyun+--------------+---------------------------------------------------------------+
1105*4882a593Smuzhiyun
1106*4882a593Smuzhiyunsysfs attribute writes interpretation
1107*4882a593Smuzhiyun-------------------------------------
1108*4882a593Smuzhiyun
1109*4882a593Smuzhiyunhwmon sysfs attributes always contain numbers, so the first thing to do is to
1110*4882a593Smuzhiyunconvert the input to a number, there are 2 ways todo this depending whether
1111*4882a593Smuzhiyunthe number can be negative or not::
1112*4882a593Smuzhiyun
1113*4882a593Smuzhiyun	unsigned long u = simple_strtoul(buf, NULL, 10);
1114*4882a593Smuzhiyun	long s = simple_strtol(buf, NULL, 10);
1115*4882a593Smuzhiyun
1116*4882a593SmuzhiyunWith buf being the buffer with the user input being passed by the kernel.
1117*4882a593SmuzhiyunNotice that we do not use the second argument of strto[u]l, and thus cannot
1118*4882a593Smuzhiyuntell when 0 is returned, if this was really 0 or is caused by invalid input.
1119*4882a593SmuzhiyunThis is done deliberately as checking this everywhere would add a lot of
1120*4882a593Smuzhiyuncode to the kernel.
1121*4882a593Smuzhiyun
1122*4882a593SmuzhiyunNotice that it is important to always store the converted value in an
1123*4882a593Smuzhiyununsigned long or long, so that no wrap around can happen before any further
1124*4882a593Smuzhiyunchecking.
1125*4882a593Smuzhiyun
1126*4882a593SmuzhiyunAfter the input string is converted to an (unsigned) long, the value should be
1127*4882a593Smuzhiyunchecked if its acceptable. Be careful with further conversions on the value
1128*4882a593Smuzhiyunbefore checking it for validity, as these conversions could still cause a wrap
1129*4882a593Smuzhiyunaround before the check. For example do not multiply the result, and only
1130*4882a593Smuzhiyunadd/subtract if it has been divided before the add/subtract.
1131*4882a593Smuzhiyun
1132*4882a593SmuzhiyunWhat to do if a value is found to be invalid, depends on the type of the
1133*4882a593Smuzhiyunsysfs attribute that is being set. If it is a continuous setting like a
1134*4882a593SmuzhiyuntempX_max or inX_max attribute, then the value should be clamped to its
1135*4882a593Smuzhiyunlimits using clamp_val(value, min_limit, max_limit). If it is not continuous
1136*4882a593Smuzhiyunlike for example a tempX_type, then when an invalid value is written,
1137*4882a593Smuzhiyun-EINVAL should be returned.
1138*4882a593Smuzhiyun
1139*4882a593SmuzhiyunExample1, temp1_max, register is a signed 8 bit value (-128 - 127 degrees)::
1140*4882a593Smuzhiyun
1141*4882a593Smuzhiyun	long v = simple_strtol(buf, NULL, 10) / 1000;
1142*4882a593Smuzhiyun	v = clamp_val(v, -128, 127);
1143*4882a593Smuzhiyun	/* write v to register */
1144*4882a593Smuzhiyun
1145*4882a593SmuzhiyunExample2, fan divider setting, valid values 2, 4 and 8::
1146*4882a593Smuzhiyun
1147*4882a593Smuzhiyun	unsigned long v = simple_strtoul(buf, NULL, 10);
1148*4882a593Smuzhiyun
1149*4882a593Smuzhiyun	switch (v) {
1150*4882a593Smuzhiyun	case 2: v = 1; break;
1151*4882a593Smuzhiyun	case 4: v = 2; break;
1152*4882a593Smuzhiyun	case 8: v = 3; break;
1153*4882a593Smuzhiyun	default:
1154*4882a593Smuzhiyun		return -EINVAL;
1155*4882a593Smuzhiyun	}
1156*4882a593Smuzhiyun	/* write v to register */
1157