Blame view

Documentation/hwmon/sysfs-interface 21.1 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
  Naming and data format standards for sysfs files
  ------------------------------------------------
  
  The libsensors library offers an interface to the raw sensors data
125ff8087   Jean Delvare   hwmon: Update the...
5
6
7
8
9
10
  through the sysfs interface. Since lm-sensors 3.0.0, libsensors is
  completely chip-independent. It assumes that all the kernel drivers
  implement the standard sysfs interface described in this document.
  This makes adding or updating support for any given chip very easy, as
  libsensors, and applications using it, do not need to be modified.
  This is a major improvement compared to lm-sensors 2.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
11
12
13
14
15
16
17
18
19
20
  
  Note that motherboards vary widely in the connections to sensor chips.
  There is no standard that ensures, for example, that the second
  temperature sensor is connected to the CPU, or that the second fan is on
  the CPU. Also, some values reported by the chips need some computation
  before they make full sense. For example, most chips can only measure
  voltages between 0 and +4V. Other voltages are scaled back into that
  range using external resistors. Since the values of these resistors
  can change from motherboard to motherboard, the conversions cannot be
  hard coded into the driver and have to be done in user space.
740e06a89   Jean Delvare   [PATCH] hwmon: Sy...
21
  For this reason, even if we aim at a chip-independent libsensors, it will
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
22
23
24
25
26
27
28
29
30
  still require a configuration file (e.g. /etc/sensors.conf) for proper
  values conversion, labeling of inputs and hiding of unused inputs.
  
  An alternative method that some programs use is to access the sysfs
  files directly. This document briefly describes the standards that the
  drivers follow, so that an application program can scan for entries and
  access this data in a simple and consistent way. That said, such programs
  will have to implement conversion, labeling and hiding of inputs. For
  this reason, it is still not recommended to bypass the library.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
31
  Each chip gets its own directory in the sysfs /sys/devices tree.  To
740e06a89   Jean Delvare   [PATCH] hwmon: Sy...
32
33
  find all sensor chips, it is easier to follow the device symlinks from
  /sys/class/hwmon/hwmon*.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
34

125ff8087   Jean Delvare   hwmon: Update the...
35
36
37
38
39
40
  Up to lm-sensors 3.0.0, libsensors looks for hardware monitoring attributes
  in the "physical" device directory. Since lm-sensors 3.0.1, attributes found
  in the hwmon "class" device directory are also supported. Complex drivers
  (e.g. drivers for multifunction chips) may want to use this possibility to
  avoid namespace pollution. The only drawback will be that older versions of
  libsensors won't support the driver in question.
740e06a89   Jean Delvare   [PATCH] hwmon: Sy...
41
  All sysfs values are fixed point numbers.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
  
  There is only one value per file, unlike the older /proc specification.
  The common scheme for files naming is: <type><number>_<item>. Usual
  types for sensor chips are "in" (voltage), "temp" (temperature) and
  "fan" (fan). Usual items are "input" (measured value), "max" (high
  threshold, "min" (low threshold). Numbering usually starts from 1,
  except for voltages which start from 0 (because most data sheets use
  this). A number is always used for elements that can be present more
  than once, even if there is a single element of the given type on the
  specific chip. Other files do not refer to a specific element, so
  they have a simple name, and no number.
  
  Alarms are direct indications read from the chips. The drivers do NOT
  make comparisons of readings to thresholds. This allows violations
  between readings to be caught and alarmed. The exact definition of an
  alarm (for example, whether a threshold must be met or must be exceeded
  to cause an alarm) is chip-dependent.
2ed426330   Hans de Goede   hwmon: update sys...
59
60
61
62
  When setting values of hwmon sysfs attributes, the string representation of
  the desired value must be written, note that strings which are not a number
  are interpreted as 0! For more on how written strings are interpreted see the
  "sysfs attribute writes interpretation" section at the end of this file.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
63
64
  
  -------------------------------------------------------------------------
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
65
66
67
  [0-*]	denotes any positive number starting from 0
  [1-*]	denotes any positive number starting from 1
  RO	read only value
cd4e96c5d   Andre Prendel   hwmon: (tmp401) A...
68
  WO	write only value
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
69
70
71
72
  RW	read/write value
  
  Read/write values may be read-only for some chips, depending on the
  hardware implementation.
176544dc5   Jean Delvare   hwmon: Update the...
73
74
  All entries (except name) are optional, and should only be created in a
  given driver if the chip has the feature.
d2b847d48   Ira W. Snyder   hwmon: Add descri...
75
76
77
  *********************
  * Global attributes *
  *********************
176544dc5   Jean Delvare   hwmon: Update the...
78
79
80
81
82
83
84
  
  name		The chip name.
  		This should be a short, lowercase string, not containing
  		spaces nor dashes, representing the chip name. This is
  		the only mandatory attribute.
  		I2C devices get this attribute created automatically.
  		RO
a51b9944a   Guenter Roeck   hwmon: (adm1031) ...
85
  update_interval	The interval at which the chip will update readings.
d2b847d48   Ira W. Snyder   hwmon: Add descri...
86
87
  		Unit: millisecond
  		RW
a51b9944a   Guenter Roeck   hwmon: (adm1031) ...
88
89
  		Some devices have a variable update rate or interval.
  		This attribute can be used to change it to the desired value.
d2b847d48   Ira W. Snyder   hwmon: Add descri...
90

740e06a89   Jean Delvare   [PATCH] hwmon: Sy...
91

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
92
93
94
  ************
  * Voltages *
  ************
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
95
  in[0-*]_min	Voltage min value.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
96
  		Unit: millivolt
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
97
  		RW
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
98
  		
f46fc8cd3   Guenter Roeck   hwmon: Add 3 crit...
99
100
101
102
103
104
  in[0-*]_lcrit	Voltage critical min value.
  		Unit: millivolt
  		RW
  		If voltage drops to or below this limit, the system may
  		take drastic action such as power down or reset. At the very
  		least, it should report a fault.
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
105
  in[0-*]_max	Voltage max value.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
106
  		Unit: millivolt
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
107
  		RW
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
108
  		
f46fc8cd3   Guenter Roeck   hwmon: Add 3 crit...
109
110
111
112
113
114
  in[0-*]_crit	Voltage critical max value.
  		Unit: millivolt
  		RW
  		If voltage reaches or exceeds this limit, the system may
  		take drastic action such as power down or reset. At the very
  		least, it should report a fault.
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
115
  in[0-*]_input	Voltage input value.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
116
  		Unit: millivolt
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
117
118
  		RO
  		Voltage measured on the chip pin.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
119
120
121
122
123
124
  		Actual voltage depends on the scaling resistors on the
  		motherboard, as recommended in the chip datasheet.
  		This varies by chip and by motherboard.
  		Because of this variation, values are generally NOT scaled
  		by the chip driver, and must be done by the application.
  		However, some drivers (notably lm87 and via686a)
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
125
  		do scale, because of internal resistors built into a chip.
176544dc5   Jean Delvare   hwmon: Update the...
126
127
128
  		These drivers will output the actual voltage. Rule of
  		thumb: drivers should report the voltage values at the
  		"pins" of the chip.
0084e9faa   Guenter Roeck   hwmon: Add new at...
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
  in[0-*]_average
  		Average voltage
  		Unit: millivolt
  		RO
  
  in[0-*]_lowest
  		Historical minimum voltage
  		Unit: millivolt
  		RO
  
  in[0-*]_highest
  		Historical maximum voltage
  		Unit: millivolt
  		RO
  
  in[0-*]_reset_history
  		Reset inX_lowest and inX_highest
  		WO
  
  in_reset_history
  		Reset inX_lowest and inX_highest for all sensors
  		WO
176544dc5   Jean Delvare   hwmon: Update the...
151
152
153
154
155
156
157
  in[0-*]_label	Suggested voltage channel label.
  		Text string
  		Should only be created if the driver has hints about what
  		this voltage channel is being used for, and user-space
  		doesn't. In all other cases, the label is provided by
  		user-space.
  		RO
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
158

057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
159
  cpu[0-*]_vid	CPU core reference voltage.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
160
  		Unit: millivolt
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
161
  		RO
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
162
163
164
  		Not always correct.
  
  vrm		Voltage Regulator Module version number. 
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
165
166
167
168
  		RW (but changing it should no more be necessary)
  		Originally the VRM standard version multiplied by 10, but now
  		an arbitrary number, as not all standards have a version
  		number.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
169
170
  		Affects the way the driver calculates the CPU core reference
  		voltage from the vid pins.
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
171
  Also see the Alarms section for status flags associated with voltages.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
172
173
174
175
  
  ********
  * Fans *
  ********
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
176
  fan[1-*]_min	Fan minimum value
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
177
  		Unit: revolution/min (RPM)
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
178
  		RW
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
179

d54d46247   Christian Engelmayer   hwmon: Update doc...
180
181
182
183
  fan[1-*]_max	Fan maximum value
  		Unit: revolution/min (RPM)
  		Only rarely supported by the hardware.
  		RW
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
184
  fan[1-*]_input	Fan input value.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
185
  		Unit: revolution/min (RPM)
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
186
  		RO
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
187

057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
188
  fan[1-*]_div	Fan divisor.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
189
  		Integer value in powers of two (1, 2, 4, 8, 16, 32, 64, 128).
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
190
  		RW
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
191
192
193
  		Some chips only support values 1, 2, 4 and 8.
  		Note that this is actually an internal clock divisor, which
  		affects the measurable speed range, not the read value.
2d2e148a2   Guenter Roeck   hwmon: Add tachom...
194
195
196
197
198
199
200
201
202
203
  fan[1-*]_pulses	Number of tachometer pulses per fan revolution.
  		Integer value, typically between 1 and 4.
  		RW
  		This value is a characteristic of the fan connected to the
  		device's input, so it has to be set in accordance with the fan
  		model.
  		Should only be created if the chip has a register to configure
  		the number of pulses. In the absence of such a register (and
  		thus attribute) the value assumed by all devices is 2 pulses
  		per fan revolution.
2dbc514a2   Jean Delvare   hwmon: Document t...
204
205
206
207
208
209
  fan[1-*]_target
  		Desired fan speed
  		Unit: revolution/min (RPM)
  		RW
  		Only makes sense if the chip supports closed-loop fan speed
  		control based on the measured fan speed.
176544dc5   Jean Delvare   hwmon: Update the...
210
211
212
213
214
215
  fan[1-*]_label	Suggested fan channel label.
  		Text string
  		Should only be created if the driver has hints about what
  		this fan channel is being used for, and user-space doesn't.
  		In all other cases, the label is provided by user-space.
  		RO
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
216
  Also see the Alarms section for status flags associated with fans.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
217
218
219
  *******
  * PWM *
  *******
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
220
  pwm[1-*]	Pulse width modulation fan control.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
221
  		Integer value in the range 0 to 255
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
222
  		RW
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
223
  		255 is max or 100%.
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
224
  pwm[1-*]_enable
875f25d5f   Jean Delvare   hwmon: Improve th...
225
226
227
228
  		Fan speed control method:
  		0: no fan speed control (i.e. fan at full speed)
  		1: manual fan speed control enabled (using pwm[1-*])
  		2+: automatic fan speed control enabled
f8d0c19a9   Jean Delvare   hwmon/it87: Add P...
229
230
  		Check individual chip documentation files for automatic mode
  		details.
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
231
  		RW
f8d0c19a9   Jean Delvare   hwmon/it87: Add P...
232
233
234
235
236
237
238
  pwm[1-*]_mode	0: DC mode (direct current)
  		1: PWM mode (pulse-width modulation)
  		RW
  
  pwm[1-*]_freq	Base PWM frequency in Hz.
  		Only possibly available when pwmN_mode is PWM, but not always
  		present even then.
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
239
  		RW
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
240
241
242
243
244
  
  pwm[1-*]_auto_channels_temp
  		Select which temperature channels affect this PWM output in
  		auto mode. Bitfield, 1 is temp1, 2 is temp2, 4 is temp3 etc...
  		Which values are possible depend on the chip used.
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
245
  		RW
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
246
247
248
249
250
251
252
  
  pwm[1-*]_auto_point[1-*]_pwm
  pwm[1-*]_auto_point[1-*]_temp
  pwm[1-*]_auto_point[1-*]_temp_hyst
  		Define the PWM vs temperature curve. Number of trip points is
  		chip-dependent. Use this for chips which associate trip points
  		to PWM output channels.
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
253
  		RW
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
254

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
255
256
257
258
259
260
  temp[1-*]_auto_point[1-*]_pwm
  temp[1-*]_auto_point[1-*]_temp
  temp[1-*]_auto_point[1-*]_temp_hyst
  		Define the PWM vs temperature curve. Number of trip points is
  		chip-dependent. Use this for chips which associate trip points
  		to temperature channels.
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
261
  		RW
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
262

f7290e24e   Jean Delvare   hwmon: Clarify au...
263
264
265
266
267
268
269
270
  There is a third case where trip points are associated to both PWM output
  channels and temperature channels: the PWM values are associated to PWM
  output channels while the temperature values are associated to temperature
  channels. In that case, the result is determined by the mapping between
  temperature inputs and PWM outputs. When several temperature inputs are
  mapped to a given PWM output, this leads to several candidate PWM values.
  The actual result is up to the chip, but in general the highest candidate
  value (fastest fan speed) wins.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
271
272
273
274
  
  ****************
  * Temperatures *
  ****************
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
275
  temp[1-*]_type	Sensor type selection.
b26f93309   Jean Delvare   hwmon: Don't expo...
276
  		Integers 1 to 6
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
277
  		RW
5f8b1f877   Guenter Roeck   hwmon: (sysfs-int...
278
  		1: CPU embedded diode
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
279
280
  		2: 3904 transistor
  		3: thermal diode
b26f93309   Jean Delvare   hwmon: Don't expo...
281
  		4: thermistor
61db011d4   Rudolf Marek   hwmon/w83793: Add...
282
283
  		5: AMD AMDSI
  		6: Intel PECI
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
284
  		Not all types are supported by all chips
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
285
  temp[1-*]_max	Temperature max value.
740e06a89   Jean Delvare   [PATCH] hwmon: Sy...
286
  		Unit: millidegree Celsius (or millivolt, see below)
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
287
  		RW
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
288

057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
289
  temp[1-*]_min	Temperature min value.
740e06a89   Jean Delvare   [PATCH] hwmon: Sy...
290
  		Unit: millidegree Celsius
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
291
  		RW
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
292

057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
293
  temp[1-*]_max_hyst
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
294
  		Temperature hysteresis value for max limit.
740e06a89   Jean Delvare   [PATCH] hwmon: Sy...
295
  		Unit: millidegree Celsius
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
296
297
  		Must be reported as an absolute temperature, NOT a delta
  		from the max value.
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
298
  		RW
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
299

057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
300
  temp[1-*]_input Temperature input value.
740e06a89   Jean Delvare   [PATCH] hwmon: Sy...
301
  		Unit: millidegree Celsius
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
302
  		RO
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
303

f46fc8cd3   Guenter Roeck   hwmon: Add 3 crit...
304
  temp[1-*]_crit	Temperature critical max value, typically greater than
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
305
  		corresponding temp_max values.
740e06a89   Jean Delvare   [PATCH] hwmon: Sy...
306
  		Unit: millidegree Celsius
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
307
  		RW
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
308

057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
309
  temp[1-*]_crit_hyst
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
310
  		Temperature hysteresis value for critical limit.
740e06a89   Jean Delvare   [PATCH] hwmon: Sy...
311
  		Unit: millidegree Celsius
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
312
313
  		Must be reported as an absolute temperature, NOT a delta
  		from the critical value.
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
314
  		RW
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
315

28e7438fa   Guenter Roeck   hwmon: Add tempX_...
316
317
318
319
320
321
322
323
324
325
326
327
328
  temp[1-*]_emergency
  		Temperature emergency max value, for chips supporting more than
  		two upper temperature limits. Must be equal or greater than
  		corresponding temp_crit values.
  		Unit: millidegree Celsius
  		RW
  
  temp[1-*]_emergency_hyst
  		Temperature hysteresis value for emergency limit.
  		Unit: millidegree Celsius
  		Must be reported as an absolute temperature, NOT a delta
  		from the emergency value.
  		RW
f46fc8cd3   Guenter Roeck   hwmon: Add 3 crit...
329
330
331
332
  temp[1-*]_lcrit	Temperature critical min value, typically lower than
  		corresponding temp_min values.
  		Unit: millidegree Celsius
  		RW
176544dc5   Jean Delvare   hwmon: Update the...
333
  temp[1-*]_offset
59ac83677   Hartmut Rick   [PATCH] smsc47m19...
334
335
336
337
  		Temperature offset which is added to the temperature reading
  		by the chip.
  		Unit: millidegree Celsius
  		Read/Write value.
176544dc5   Jean Delvare   hwmon: Update the...
338
339
340
341
342
343
344
  temp[1-*]_label	Suggested temperature channel label.
  		Text string
  		Should only be created if the driver has hints about what
  		this temperature channel is being used for, and user-space
  		doesn't. In all other cases, the label is provided by
  		user-space.
  		RO
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
345

cd4e96c5d   Andre Prendel   hwmon: (tmp401) A...
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
  temp[1-*]_lowest
  		Historical minimum temperature
  		Unit: millidegree Celsius
  		RO
  
  temp[1-*]_highest
  		Historical maximum temperature
  		Unit: millidegree Celsius
  		RO
  
  temp[1-*]_reset_history
  		Reset temp_lowest and temp_highest
  		WO
  
  temp_reset_history
  		Reset temp_lowest and temp_highest for all sensors
  		WO
740e06a89   Jean Delvare   [PATCH] hwmon: Sy...
363
364
365
366
367
368
369
370
  Some chips measure temperature using external thermistors and an ADC, and
  report the temperature measurement as a voltage. Converting this voltage
  back to a temperature (or the other way around for limits) requires
  mathematical functions not available in the kernel, so the conversion
  must occur in user space. For these chips, all temp* files described
  above should contain values expressed in millivolt instead of millidegree
  Celsius. In other words, such temperature channels are handled as voltage
  channels by the driver.
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
371
  Also see the Alarms section for status flags associated with temperatures.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
372
373
374
375
  
  ************
  * Currents *
  ************
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
376
  curr[1-*]_max	Current max value
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
377
  		Unit: milliampere
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
378
  		RW
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
379

057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
380
  curr[1-*]_min	Current min value.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
381
  		Unit: milliampere
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
382
  		RW
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
383

581693b51   Guenter Roeck   hwmon: sysfs ABI ...
384
385
386
387
388
389
390
  curr[1-*]_lcrit	Current critical low value
  		Unit: milliampere
  		RW
  
  curr[1-*]_crit	Current critical high value.
  		Unit: milliampere
  		RW
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
391
  curr[1-*]_input	Current input value
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
392
  		Unit: milliampere
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
393
  		RO
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
394

0084e9faa   Guenter Roeck   hwmon: Add new at...
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
  curr[1-*]_average
  		Average current use
  		Unit: milliampere
  		RO
  
  curr[1-*]_lowest
  		Historical minimum current
  		Unit: milliampere
  		RO
  
  curr[1-*]_highest
  		Historical maximum current
  		Unit: milliampere
  		RO
  
  curr[1-*]_reset_history
  		Reset currX_lowest and currX_highest
  		WO
  
  curr_reset_history
  		Reset currX_lowest and currX_highest for all sensors
  		WO
581693b51   Guenter Roeck   hwmon: sysfs ABI ...
417
  Also see the Alarms section for status flags associated with currents.
38fb56a22   Darrick J. Wong   hwmon: Add power ...
418
419
420
421
422
423
424
  *********
  * Power *
  *********
  
  power[1-*]_average		Average power use
  				Unit: microWatt
  				RO
115a57c5b   Darrick J. Wong   hwmon: enhance th...
425
426
427
  power[1-*]_average_interval	Power use averaging interval.  A poll
  				notification is sent to this file if the
  				hardware changes the averaging interval.
ddedc658f   Darrick J. Wong   hwmon: Define sys...
428
429
  				Unit: milliseconds
  				RW
115a57c5b   Darrick J. Wong   hwmon: enhance th...
430
431
432
433
434
435
436
  power[1-*]_average_interval_max	Maximum power use averaging interval
  				Unit: milliseconds
  				RO
  
  power[1-*]_average_interval_min	Minimum power use averaging interval
  				Unit: milliseconds
  				RO
38fb56a22   Darrick J. Wong   hwmon: Add power ...
437
438
439
440
441
442
443
  power[1-*]_average_highest	Historical average maximum power use
  				Unit: microWatt
  				RO
  
  power[1-*]_average_lowest	Historical average minimum power use
  				Unit: microWatt
  				RO
115a57c5b   Darrick J. Wong   hwmon: enhance th...
444
445
446
447
448
449
450
451
452
453
454
  power[1-*]_average_max		A poll notification is sent to
  				power[1-*]_average when power use
  				rises above this value.
  				Unit: microWatt
  				RW
  
  power[1-*]_average_min		A poll notification is sent to
  				power[1-*]_average when power use
  				sinks below this value.
  				Unit: microWatt
  				RW
38fb56a22   Darrick J. Wong   hwmon: Add power ...
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
  power[1-*]_input		Instantaneous power use
  				Unit: microWatt
  				RO
  
  power[1-*]_input_highest	Historical maximum power use
  				Unit: microWatt
  				RO
  
  power[1-*]_input_lowest		Historical minimum power use
  				Unit: microWatt
  				RO
  
  power[1-*]_reset_history	Reset input_highest, input_lowest,
  				average_highest and average_lowest.
  				WO
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
470

115a57c5b   Darrick J. Wong   hwmon: enhance th...
471
472
473
  power[1-*]_accuracy		Accuracy of the power meter.
  				Unit: Percent
  				RO
115a57c5b   Darrick J. Wong   hwmon: enhance th...
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
  power[1-*]_cap			If power use rises above this limit, the
  				system should take action to reduce power use.
  				A poll notification is sent to this file if the
  				cap is changed by the hardware.  The *_cap
  				files only appear if the cap is known to be
  				enforced by hardware.
  				Unit: microWatt
  				RW
  
  power[1-*]_cap_hyst		Margin of hysteresis built around capping and
  				notification.
  				Unit: microWatt
  				RW
  
  power[1-*]_cap_max		Maximum cap that can be set.
  				Unit: microWatt
  				RO
  
  power[1-*]_cap_min		Minimum cap that can be set.
  				Unit: microWatt
  				RO
581693b51   Guenter Roeck   hwmon: sysfs ABI ...
495
496
497
498
499
500
501
502
503
504
505
506
507
  power[1-*]_max			Maximum power.
  				Unit: microWatt
  				RW
  
  power[1-*]_crit			Critical maximum power.
  				If power rises to or above this limit, the
  				system is expected take drastic action to reduce
  				power consumption, such as a system shutdown or
  				a forced powerdown of some devices.
  				Unit: microWatt
  				RW
  
  Also see the Alarms section for status flags associated with power readings.
400b48ecd   Jean Delvare   [PATCH] hwmon: Ad...
508
  **********
ddedc658f   Darrick J. Wong   hwmon: Define sys...
509
510
511
512
513
514
  * Energy *
  **********
  
  energy[1-*]_input		Cumulative energy use
  				Unit: microJoule
  				RO
ec1992094   Jean Delvare   hwmon: Define a s...
515

c6c2c1636   Guenter Roeck   hwmon: Add humidi...
516
517
518
519
520
521
522
  ************
  * Humidity *
  ************
  
  humidity[1-*]_input		Humidity
  				Unit: milli-percent (per cent mille, pcm)
  				RO
ddedc658f   Darrick J. Wong   hwmon: Define sys...
523
  **********
400b48ecd   Jean Delvare   [PATCH] hwmon: Ad...
524
525
526
527
528
529
530
531
532
  * Alarms *
  **********
  
  Each channel or limit may have an associated alarm file, containing a
  boolean value. 1 means than an alarm condition exists, 0 means no alarm.
  
  Usually a given chip will either use channel-related alarms, or
  limit-related alarms, not both. The driver should just reflect the hardware
  implementation.
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
533
  in[0-*]_alarm
e04a715e4   Guenter Roeck   hwmon: Add 4 curr...
534
  curr[1-*]_alarm
581693b51   Guenter Roeck   hwmon: sysfs ABI ...
535
  power[1-*]_alarm
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
536
537
  fan[1-*]_alarm
  temp[1-*]_alarm
400b48ecd   Jean Delvare   [PATCH] hwmon: Ad...
538
  		Channel alarm
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
539
540
541
  		0: no alarm
  		1: alarm
  		RO
400b48ecd   Jean Delvare   [PATCH] hwmon: Ad...
542
543
  
  OR
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
544
545
  in[0-*]_min_alarm
  in[0-*]_max_alarm
581693b51   Guenter Roeck   hwmon: sysfs ABI ...
546
547
  in[0-*]_lcrit_alarm
  in[0-*]_crit_alarm
e04a715e4   Guenter Roeck   hwmon: Add 4 curr...
548
549
  curr[1-*]_min_alarm
  curr[1-*]_max_alarm
581693b51   Guenter Roeck   hwmon: sysfs ABI ...
550
551
552
553
554
  curr[1-*]_lcrit_alarm
  curr[1-*]_crit_alarm
  power[1-*]_cap_alarm
  power[1-*]_max_alarm
  power[1-*]_crit_alarm
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
555
  fan[1-*]_min_alarm
d54d46247   Christian Engelmayer   hwmon: Update doc...
556
  fan[1-*]_max_alarm
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
557
558
  temp[1-*]_min_alarm
  temp[1-*]_max_alarm
581693b51   Guenter Roeck   hwmon: sysfs ABI ...
559
  temp[1-*]_lcrit_alarm
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
560
  temp[1-*]_crit_alarm
28e7438fa   Guenter Roeck   hwmon: Add tempX_...
561
  temp[1-*]_emergency_alarm
400b48ecd   Jean Delvare   [PATCH] hwmon: Ad...
562
  		Limit alarm
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
563
564
565
  		0: no alarm
  		1: alarm
  		RO
400b48ecd   Jean Delvare   [PATCH] hwmon: Ad...
566
567
568
569
570
  
  Each input channel may have an associated fault file. This can be used
  to notify open diodes, unconnected fans etc. where the hardware
  supports it. When this boolean has value 1, the measurement for that
  channel should not be trusted.
7817a39e6   Jean Delvare   hwmon: Fault file...
571
572
  fan[1-*]_fault
  temp[1-*]_fault
400b48ecd   Jean Delvare   [PATCH] hwmon: Ad...
573
  		Input fault condition
25985edce   Lucas De Marchi   Fix common misspe...
574
  		0: no fault occurred
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
575
576
  		1: fault condition
  		RO
400b48ecd   Jean Delvare   [PATCH] hwmon: Ad...
577
578
579
580
  
  Some chips also offer the possibility to get beeped when an alarm occurs:
  
  beep_enable	Master beep enable
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
581
582
583
  		0: no beeps
  		1: beeps
  		RW
400b48ecd   Jean Delvare   [PATCH] hwmon: Ad...
584

057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
585
  in[0-*]_beep
e04a715e4   Guenter Roeck   hwmon: Add 4 curr...
586
  curr[1-*]_beep
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
587
588
  fan[1-*]_beep
  temp[1-*]_beep
400b48ecd   Jean Delvare   [PATCH] hwmon: Ad...
589
  		Channel beep
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
590
591
592
  		0: disable
  		1: enable
  		RW
400b48ecd   Jean Delvare   [PATCH] hwmon: Ad...
593
594
595
596
597
598
599
  
  In theory, a chip could provide per-limit beep masking, but no such chip
  was seen so far.
  
  Old drivers provided a different, non-standard interface to alarms and
  beeps. These interface files are deprecated, but will be kept around
  for compatibility reasons:
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
600
601
  
  alarms		Alarm bitmask.
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
602
  		RO
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
603
604
605
606
607
608
609
  		Integer representation of one to four bytes.
  		A '1' bit means an alarm.
  		Chips should be programmed for 'comparator' mode so that
  		the alarm will 'come back' after you read the register
  		if it is still valid.
  		Generally a direct representation of a chip's internal
  		alarm registers; there is no standard for the position
400b48ecd   Jean Delvare   [PATCH] hwmon: Ad...
610
611
612
  		of individual bits. For this reason, the use of this
  		interface file for new drivers is discouraged. Use
  		individual *_alarm and *_fault files instead.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
613
  		Bits are defined in kernel/include/sensors.h.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
614
  beep_mask	Bitmask for beep.
400b48ecd   Jean Delvare   [PATCH] hwmon: Ad...
615
616
617
  		Same format as 'alarms' with the same bit locations,
  		use discouraged for the same reason. Use individual
  		*_beep files instead.
057bc3509   Rudolf Marek   [PATCH] hwmon: Sy...
618
  		RW
2ed426330   Hans de Goede   hwmon: update sys...
619

ec1992094   Jean Delvare   hwmon: Define a s...
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
  ***********************
  * Intrusion detection *
  ***********************
  
  intrusion[0-*]_alarm
  		Chassis intrusion detection
  		0: OK
  		1: intrusion detected
  		RW
  		Contrary to regular alarm flags which clear themselves
  		automatically when read, this one sticks until cleared by
  		the user. This is done by writing 0 to the file. Writing
  		other values is unsupported.
  
  intrusion[0-*]_beep
  		Chassis intrusion beep
  		0: disable
  		1: enable
  		RW
2ed426330   Hans de Goede   hwmon: update sys...
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
  sysfs attribute writes interpretation
  -------------------------------------
  
  hwmon sysfs attributes always contain numbers, so the first thing to do is to
  convert the input to a number, there are 2 ways todo this depending whether
  the number can be negative or not:
  unsigned long u = simple_strtoul(buf, NULL, 10);
  long s = simple_strtol(buf, NULL, 10);
  
  With buf being the buffer with the user input being passed by the kernel.
  Notice that we do not use the second argument of strto[u]l, and thus cannot
  tell when 0 is returned, if this was really 0 or is caused by invalid input.
  This is done deliberately as checking this everywhere would add a lot of
  code to the kernel.
  
  Notice that it is important to always store the converted value in an
  unsigned long or long, so that no wrap around can happen before any further
  checking.
  
  After the input string is converted to an (unsigned) long, the value should be
  checked if its acceptable. Be careful with further conversions on the value
  before checking it for validity, as these conversions could still cause a wrap
  around before the check. For example do not multiply the result, and only
  add/subtract if it has been divided before the add/subtract.
  
  What to do if a value is found to be invalid, depends on the type of the
  sysfs attribute that is being set. If it is a continuous setting like a
  tempX_max or inX_max attribute, then the value should be clamped to its
  limits using SENSORS_LIMIT(value, min_limit, max_limit). If it is not
  continuous like for example a tempX_type, then when an invalid value is
  written, -EINVAL should be returned.
  
  Example1, temp1_max, register is a signed 8 bit value (-128 - 127 degrees):
5fbea518d   Jean Delvare   hwmon: Fix the co...
672
673
674
675
  
  	long v = simple_strtol(buf, NULL, 10) / 1000;
  	v = SENSORS_LIMIT(v, -128, 127);
  	/* write v to register */
2ed426330   Hans de Goede   hwmon: update sys...
676
677
  
  Example2, fan divider setting, valid values 2, 4 and 8:
5fbea518d   Jean Delvare   hwmon: Fix the co...
678
679
680
681
682
683
684
685
686
687
688
  
  	unsigned long v = simple_strtoul(buf, NULL, 10);
  
  	switch (v) {
  	case 2: v = 1; break;
  	case 4: v = 2; break;
  	case 8: v = 3; break;
  	default:
  		return -EINVAL;
  	}
  	/* write v to register */