Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
9078 turbocat 1
/* SPDX-License-Identifier: GPL-2.0-only */
2
/*
3
    hwmon.h - part of lm_sensors, Linux kernel modules for hardware monitoring
4
 
5
    This file declares helper functions for the sysfs class "hwmon",
6
    for use by sensors drivers.
7
 
8
    Copyright (C) 2005 Mark M. Hoffman 
9
 
10
*/
11
 
12
#ifndef _HWMON_H_
13
#define _HWMON_H_
14
 
15
#include 
16
 
17
struct device;
18
struct attribute_group;
19
 
20
enum hwmon_sensor_types {
21
	hwmon_chip,
22
	hwmon_temp,
23
	hwmon_in,
24
	hwmon_curr,
25
	hwmon_power,
26
	hwmon_energy,
27
	hwmon_humidity,
28
	hwmon_fan,
29
	hwmon_pwm,
30
	hwmon_intrusion,
31
	hwmon_max,
32
};
33
 
34
enum hwmon_chip_attributes {
35
	hwmon_chip_temp_reset_history,
36
	hwmon_chip_in_reset_history,
37
	hwmon_chip_curr_reset_history,
38
	hwmon_chip_power_reset_history,
39
	hwmon_chip_register_tz,
40
	hwmon_chip_update_interval,
41
	hwmon_chip_alarms,
42
	hwmon_chip_samples,
43
	hwmon_chip_curr_samples,
44
	hwmon_chip_in_samples,
45
	hwmon_chip_power_samples,
46
	hwmon_chip_temp_samples,
47
};
48
 
49
#define HWMON_C_TEMP_RESET_HISTORY	BIT(hwmon_chip_temp_reset_history)
50
#define HWMON_C_IN_RESET_HISTORY	BIT(hwmon_chip_in_reset_history)
51
#define HWMON_C_CURR_RESET_HISTORY	BIT(hwmon_chip_curr_reset_history)
52
#define HWMON_C_POWER_RESET_HISTORY	BIT(hwmon_chip_power_reset_history)
53
#define HWMON_C_REGISTER_TZ		BIT(hwmon_chip_register_tz)
54
#define HWMON_C_UPDATE_INTERVAL		BIT(hwmon_chip_update_interval)
55
#define HWMON_C_ALARMS			BIT(hwmon_chip_alarms)
56
#define HWMON_C_SAMPLES			BIT(hwmon_chip_samples)
57
#define HWMON_C_CURR_SAMPLES		BIT(hwmon_chip_curr_samples)
58
#define HWMON_C_IN_SAMPLES		BIT(hwmon_chip_in_samples)
59
#define HWMON_C_POWER_SAMPLES		BIT(hwmon_chip_power_samples)
60
#define HWMON_C_TEMP_SAMPLES		BIT(hwmon_chip_temp_samples)
61
 
62
enum hwmon_temp_attributes {
63
	hwmon_temp_enable,
64
	hwmon_temp_input,
65
	hwmon_temp_type,
66
	hwmon_temp_lcrit,
67
	hwmon_temp_lcrit_hyst,
68
	hwmon_temp_min,
69
	hwmon_temp_min_hyst,
70
	hwmon_temp_max,
71
	hwmon_temp_max_hyst,
72
	hwmon_temp_crit,
73
	hwmon_temp_crit_hyst,
74
	hwmon_temp_emergency,
75
	hwmon_temp_emergency_hyst,
76
	hwmon_temp_alarm,
77
	hwmon_temp_lcrit_alarm,
78
	hwmon_temp_min_alarm,
79
	hwmon_temp_max_alarm,
80
	hwmon_temp_crit_alarm,
81
	hwmon_temp_emergency_alarm,
82
	hwmon_temp_fault,
83
	hwmon_temp_offset,
84
	hwmon_temp_label,
85
	hwmon_temp_lowest,
86
	hwmon_temp_highest,
87
	hwmon_temp_reset_history,
88
	hwmon_temp_rated_min,
89
	hwmon_temp_rated_max,
90
};
91
 
92
#define HWMON_T_ENABLE		BIT(hwmon_temp_enable)
93
#define HWMON_T_INPUT		BIT(hwmon_temp_input)
94
#define HWMON_T_TYPE		BIT(hwmon_temp_type)
95
#define HWMON_T_LCRIT		BIT(hwmon_temp_lcrit)
96
#define HWMON_T_LCRIT_HYST	BIT(hwmon_temp_lcrit_hyst)
97
#define HWMON_T_MIN		BIT(hwmon_temp_min)
98
#define HWMON_T_MIN_HYST	BIT(hwmon_temp_min_hyst)
99
#define HWMON_T_MAX		BIT(hwmon_temp_max)
100
#define HWMON_T_MAX_HYST	BIT(hwmon_temp_max_hyst)
101
#define HWMON_T_CRIT		BIT(hwmon_temp_crit)
102
#define HWMON_T_CRIT_HYST	BIT(hwmon_temp_crit_hyst)
103
#define HWMON_T_EMERGENCY	BIT(hwmon_temp_emergency)
104
#define HWMON_T_EMERGENCY_HYST	BIT(hwmon_temp_emergency_hyst)
105
#define HWMON_T_ALARM		BIT(hwmon_temp_alarm)
106
#define HWMON_T_MIN_ALARM	BIT(hwmon_temp_min_alarm)
107
#define HWMON_T_MAX_ALARM	BIT(hwmon_temp_max_alarm)
108
#define HWMON_T_CRIT_ALARM	BIT(hwmon_temp_crit_alarm)
109
#define HWMON_T_LCRIT_ALARM	BIT(hwmon_temp_lcrit_alarm)
110
#define HWMON_T_EMERGENCY_ALARM	BIT(hwmon_temp_emergency_alarm)
111
#define HWMON_T_FAULT		BIT(hwmon_temp_fault)
112
#define HWMON_T_OFFSET		BIT(hwmon_temp_offset)
113
#define HWMON_T_LABEL		BIT(hwmon_temp_label)
114
#define HWMON_T_LOWEST		BIT(hwmon_temp_lowest)
115
#define HWMON_T_HIGHEST		BIT(hwmon_temp_highest)
116
#define HWMON_T_RESET_HISTORY	BIT(hwmon_temp_reset_history)
117
#define HWMON_T_RATED_MIN	BIT(hwmon_temp_rated_min)
118
#define HWMON_T_RATED_MAX	BIT(hwmon_temp_rated_max)
119
 
120
enum hwmon_in_attributes {
121
	hwmon_in_enable,
122
	hwmon_in_input,
123
	hwmon_in_min,
124
	hwmon_in_max,
125
	hwmon_in_lcrit,
126
	hwmon_in_crit,
127
	hwmon_in_average,
128
	hwmon_in_lowest,
129
	hwmon_in_highest,
130
	hwmon_in_reset_history,
131
	hwmon_in_label,
132
	hwmon_in_alarm,
133
	hwmon_in_min_alarm,
134
	hwmon_in_max_alarm,
135
	hwmon_in_lcrit_alarm,
136
	hwmon_in_crit_alarm,
137
	hwmon_in_rated_min,
138
	hwmon_in_rated_max,
139
};
140
 
141
#define HWMON_I_ENABLE		BIT(hwmon_in_enable)
142
#define HWMON_I_INPUT		BIT(hwmon_in_input)
143
#define HWMON_I_MIN		BIT(hwmon_in_min)
144
#define HWMON_I_MAX		BIT(hwmon_in_max)
145
#define HWMON_I_LCRIT		BIT(hwmon_in_lcrit)
146
#define HWMON_I_CRIT		BIT(hwmon_in_crit)
147
#define HWMON_I_AVERAGE		BIT(hwmon_in_average)
148
#define HWMON_I_LOWEST		BIT(hwmon_in_lowest)
149
#define HWMON_I_HIGHEST		BIT(hwmon_in_highest)
150
#define HWMON_I_RESET_HISTORY	BIT(hwmon_in_reset_history)
151
#define HWMON_I_LABEL		BIT(hwmon_in_label)
152
#define HWMON_I_ALARM		BIT(hwmon_in_alarm)
153
#define HWMON_I_MIN_ALARM	BIT(hwmon_in_min_alarm)
154
#define HWMON_I_MAX_ALARM	BIT(hwmon_in_max_alarm)
155
#define HWMON_I_LCRIT_ALARM	BIT(hwmon_in_lcrit_alarm)
156
#define HWMON_I_CRIT_ALARM	BIT(hwmon_in_crit_alarm)
157
#define HWMON_I_RATED_MIN	BIT(hwmon_in_rated_min)
158
#define HWMON_I_RATED_MAX	BIT(hwmon_in_rated_max)
159
 
160
enum hwmon_curr_attributes {
161
	hwmon_curr_enable,
162
	hwmon_curr_input,
163
	hwmon_curr_min,
164
	hwmon_curr_max,
165
	hwmon_curr_lcrit,
166
	hwmon_curr_crit,
167
	hwmon_curr_average,
168
	hwmon_curr_lowest,
169
	hwmon_curr_highest,
170
	hwmon_curr_reset_history,
171
	hwmon_curr_label,
172
	hwmon_curr_alarm,
173
	hwmon_curr_min_alarm,
174
	hwmon_curr_max_alarm,
175
	hwmon_curr_lcrit_alarm,
176
	hwmon_curr_crit_alarm,
177
	hwmon_curr_rated_min,
178
	hwmon_curr_rated_max,
179
};
180
 
181
#define HWMON_C_ENABLE		BIT(hwmon_curr_enable)
182
#define HWMON_C_INPUT		BIT(hwmon_curr_input)
183
#define HWMON_C_MIN		BIT(hwmon_curr_min)
184
#define HWMON_C_MAX		BIT(hwmon_curr_max)
185
#define HWMON_C_LCRIT		BIT(hwmon_curr_lcrit)
186
#define HWMON_C_CRIT		BIT(hwmon_curr_crit)
187
#define HWMON_C_AVERAGE		BIT(hwmon_curr_average)
188
#define HWMON_C_LOWEST		BIT(hwmon_curr_lowest)
189
#define HWMON_C_HIGHEST		BIT(hwmon_curr_highest)
190
#define HWMON_C_RESET_HISTORY	BIT(hwmon_curr_reset_history)
191
#define HWMON_C_LABEL		BIT(hwmon_curr_label)
192
#define HWMON_C_ALARM		BIT(hwmon_curr_alarm)
193
#define HWMON_C_MIN_ALARM	BIT(hwmon_curr_min_alarm)
194
#define HWMON_C_MAX_ALARM	BIT(hwmon_curr_max_alarm)
195
#define HWMON_C_LCRIT_ALARM	BIT(hwmon_curr_lcrit_alarm)
196
#define HWMON_C_CRIT_ALARM	BIT(hwmon_curr_crit_alarm)
197
#define HWMON_C_RATED_MIN	BIT(hwmon_curr_rated_min)
198
#define HWMON_C_RATED_MAX	BIT(hwmon_curr_rated_max)
199
 
200
enum hwmon_power_attributes {
201
	hwmon_power_enable,
202
	hwmon_power_average,
203
	hwmon_power_average_interval,
204
	hwmon_power_average_interval_max,
205
	hwmon_power_average_interval_min,
206
	hwmon_power_average_highest,
207
	hwmon_power_average_lowest,
208
	hwmon_power_average_max,
209
	hwmon_power_average_min,
210
	hwmon_power_input,
211
	hwmon_power_input_highest,
212
	hwmon_power_input_lowest,
213
	hwmon_power_reset_history,
214
	hwmon_power_accuracy,
215
	hwmon_power_cap,
216
	hwmon_power_cap_hyst,
217
	hwmon_power_cap_max,
218
	hwmon_power_cap_min,
219
	hwmon_power_min,
220
	hwmon_power_max,
221
	hwmon_power_crit,
222
	hwmon_power_lcrit,
223
	hwmon_power_label,
224
	hwmon_power_alarm,
225
	hwmon_power_cap_alarm,
226
	hwmon_power_min_alarm,
227
	hwmon_power_max_alarm,
228
	hwmon_power_lcrit_alarm,
229
	hwmon_power_crit_alarm,
230
	hwmon_power_rated_min,
231
	hwmon_power_rated_max,
232
};
233
 
234
#define HWMON_P_ENABLE			BIT(hwmon_power_enable)
235
#define HWMON_P_AVERAGE			BIT(hwmon_power_average)
236
#define HWMON_P_AVERAGE_INTERVAL	BIT(hwmon_power_average_interval)
237
#define HWMON_P_AVERAGE_INTERVAL_MAX	BIT(hwmon_power_average_interval_max)
238
#define HWMON_P_AVERAGE_INTERVAL_MIN	BIT(hwmon_power_average_interval_min)
239
#define HWMON_P_AVERAGE_HIGHEST		BIT(hwmon_power_average_highest)
240
#define HWMON_P_AVERAGE_LOWEST		BIT(hwmon_power_average_lowest)
241
#define HWMON_P_AVERAGE_MAX		BIT(hwmon_power_average_max)
242
#define HWMON_P_AVERAGE_MIN		BIT(hwmon_power_average_min)
243
#define HWMON_P_INPUT			BIT(hwmon_power_input)
244
#define HWMON_P_INPUT_HIGHEST		BIT(hwmon_power_input_highest)
245
#define HWMON_P_INPUT_LOWEST		BIT(hwmon_power_input_lowest)
246
#define HWMON_P_RESET_HISTORY		BIT(hwmon_power_reset_history)
247
#define HWMON_P_ACCURACY		BIT(hwmon_power_accuracy)
248
#define HWMON_P_CAP			BIT(hwmon_power_cap)
249
#define HWMON_P_CAP_HYST		BIT(hwmon_power_cap_hyst)
250
#define HWMON_P_CAP_MAX			BIT(hwmon_power_cap_max)
251
#define HWMON_P_CAP_MIN			BIT(hwmon_power_cap_min)
252
#define HWMON_P_MIN			BIT(hwmon_power_min)
253
#define HWMON_P_MAX			BIT(hwmon_power_max)
254
#define HWMON_P_LCRIT			BIT(hwmon_power_lcrit)
255
#define HWMON_P_CRIT			BIT(hwmon_power_crit)
256
#define HWMON_P_LABEL			BIT(hwmon_power_label)
257
#define HWMON_P_ALARM			BIT(hwmon_power_alarm)
258
#define HWMON_P_CAP_ALARM		BIT(hwmon_power_cap_alarm)
259
#define HWMON_P_MIN_ALARM		BIT(hwmon_power_min_alarm)
260
#define HWMON_P_MAX_ALARM		BIT(hwmon_power_max_alarm)
261
#define HWMON_P_LCRIT_ALARM		BIT(hwmon_power_lcrit_alarm)
262
#define HWMON_P_CRIT_ALARM		BIT(hwmon_power_crit_alarm)
263
#define HWMON_P_RATED_MIN		BIT(hwmon_power_rated_min)
264
#define HWMON_P_RATED_MAX		BIT(hwmon_power_rated_max)
265
 
266
enum hwmon_energy_attributes {
267
	hwmon_energy_enable,
268
	hwmon_energy_input,
269
	hwmon_energy_label,
270
};
271
 
272
#define HWMON_E_ENABLE			BIT(hwmon_energy_enable)
273
#define HWMON_E_INPUT			BIT(hwmon_energy_input)
274
#define HWMON_E_LABEL			BIT(hwmon_energy_label)
275
 
276
enum hwmon_humidity_attributes {
277
	hwmon_humidity_enable,
278
	hwmon_humidity_input,
279
	hwmon_humidity_label,
280
	hwmon_humidity_min,
281
	hwmon_humidity_min_hyst,
282
	hwmon_humidity_max,
283
	hwmon_humidity_max_hyst,
284
	hwmon_humidity_alarm,
285
	hwmon_humidity_fault,
286
	hwmon_humidity_rated_min,
287
	hwmon_humidity_rated_max,
288
};
289
 
290
#define HWMON_H_ENABLE			BIT(hwmon_humidity_enable)
291
#define HWMON_H_INPUT			BIT(hwmon_humidity_input)
292
#define HWMON_H_LABEL			BIT(hwmon_humidity_label)
293
#define HWMON_H_MIN			BIT(hwmon_humidity_min)
294
#define HWMON_H_MIN_HYST		BIT(hwmon_humidity_min_hyst)
295
#define HWMON_H_MAX			BIT(hwmon_humidity_max)
296
#define HWMON_H_MAX_HYST		BIT(hwmon_humidity_max_hyst)
297
#define HWMON_H_ALARM			BIT(hwmon_humidity_alarm)
298
#define HWMON_H_FAULT			BIT(hwmon_humidity_fault)
299
#define HWMON_H_RATED_MIN		BIT(hwmon_humidity_rated_min)
300
#define HWMON_H_RATED_MAX		BIT(hwmon_humidity_rated_max)
301
 
302
enum hwmon_fan_attributes {
303
	hwmon_fan_enable,
304
	hwmon_fan_input,
305
	hwmon_fan_label,
306
	hwmon_fan_min,
307
	hwmon_fan_max,
308
	hwmon_fan_div,
309
	hwmon_fan_pulses,
310
	hwmon_fan_target,
311
	hwmon_fan_alarm,
312
	hwmon_fan_min_alarm,
313
	hwmon_fan_max_alarm,
314
	hwmon_fan_fault,
315
};
316
 
317
#define HWMON_F_ENABLE			BIT(hwmon_fan_enable)
318
#define HWMON_F_INPUT			BIT(hwmon_fan_input)
319
#define HWMON_F_LABEL			BIT(hwmon_fan_label)
320
#define HWMON_F_MIN			BIT(hwmon_fan_min)
321
#define HWMON_F_MAX			BIT(hwmon_fan_max)
322
#define HWMON_F_DIV			BIT(hwmon_fan_div)
323
#define HWMON_F_PULSES			BIT(hwmon_fan_pulses)
324
#define HWMON_F_TARGET			BIT(hwmon_fan_target)
325
#define HWMON_F_ALARM			BIT(hwmon_fan_alarm)
326
#define HWMON_F_MIN_ALARM		BIT(hwmon_fan_min_alarm)
327
#define HWMON_F_MAX_ALARM		BIT(hwmon_fan_max_alarm)
328
#define HWMON_F_FAULT			BIT(hwmon_fan_fault)
329
 
330
enum hwmon_pwm_attributes {
331
	hwmon_pwm_input,
332
	hwmon_pwm_enable,
333
	hwmon_pwm_mode,
334
	hwmon_pwm_freq,
335
};
336
 
337
#define HWMON_PWM_INPUT			BIT(hwmon_pwm_input)
338
#define HWMON_PWM_ENABLE		BIT(hwmon_pwm_enable)
339
#define HWMON_PWM_MODE			BIT(hwmon_pwm_mode)
340
#define HWMON_PWM_FREQ			BIT(hwmon_pwm_freq)
341
 
342
enum hwmon_intrusion_attributes {
343
	hwmon_intrusion_alarm,
344
	hwmon_intrusion_beep,
345
};
346
#define HWMON_INTRUSION_ALARM		BIT(hwmon_intrusion_alarm)
347
#define HWMON_INTRUSION_BEEP		BIT(hwmon_intrusion_beep)
348
 
349
/**
350
 * struct hwmon_ops - hwmon device operations
351
 * @is_visible: Callback to return attribute visibility. Mandatory.
352
 *		Parameters are:
353
 *		@const void *drvdata:
354
 *			Pointer to driver-private data structure passed
355
 *			as argument to hwmon_device_register_with_info().
356
 *		@type:	Sensor type
357
 *		@attr:	Sensor attribute
358
 *		@channel:
359
 *			Channel number
360
 *		The function returns the file permissions.
361
 *		If the return value is 0, no attribute will be created.
362
 * @read:	Read callback for data attributes. Mandatory if readable
363
 *		data attributes are present.
364
 *		Parameters are:
365
 *		@dev:	Pointer to hardware monitoring device
366
 *		@type:	Sensor type
367
 *		@attr:	Sensor attribute
368
 *		@channel:
369
 *			Channel number
370
 *		@val:	Pointer to returned value
371
 *		The function returns 0 on success or a negative error number.
372
 * @read_string:
373
 *		Read callback for string attributes. Mandatory if string
374
 *		attributes are present.
375
 *		Parameters are:
376
 *		@dev:	Pointer to hardware monitoring device
377
 *		@type:	Sensor type
378
 *		@attr:	Sensor attribute
379
 *		@channel:
380
 *			Channel number
381
 *		@str:	Pointer to returned string
382
 *		The function returns 0 on success or a negative error number.
383
 * @write:	Write callback for data attributes. Mandatory if writeable
384
 *		data attributes are present.
385
 *		Parameters are:
386
 *		@dev:	Pointer to hardware monitoring device
387
 *		@type:	Sensor type
388
 *		@attr:	Sensor attribute
389
 *		@channel:
390
 *			Channel number
391
 *		@val:	Value to write
392
 *		The function returns 0 on success or a negative error number.
393
 */
394
struct hwmon_ops {
395
	umode_t (*is_visible)(const void *drvdata, enum hwmon_sensor_types type,
396
			      u32 attr, int channel);
397
	int (*read)(struct device *dev, enum hwmon_sensor_types type,
398
		    u32 attr, int channel, long *val);
399
	int (*read_string)(struct device *dev, enum hwmon_sensor_types type,
400
		    u32 attr, int channel, const char **str);
401
	int (*write)(struct device *dev, enum hwmon_sensor_types type,
402
		     u32 attr, int channel, long val);
403
};
404
 
405
/**
406
 * Channel information
407
 * @type:	Channel type.
408
 * @config:	Pointer to NULL-terminated list of channel parameters.
409
 *		Use for per-channel attributes.
410
 */
411
struct hwmon_channel_info {
412
	enum hwmon_sensor_types type;
413
	const u32 *config;
414
};
415
 
416
#define HWMON_CHANNEL_INFO(stype, ...)	\
417
	(&(struct hwmon_channel_info) {	\
418
		.type = hwmon_##stype,	\
419
		.config = (u32 []) {	\
420
			__VA_ARGS__, 0	\
421
		}			\
422
	})
423
 
424
/**
425
 * Chip configuration
426
 * @ops:	Pointer to hwmon operations.
427
 * @info:	Null-terminated list of channel information.
428
 */
429
struct hwmon_chip_info {
430
	const struct hwmon_ops *ops;
431
	const struct hwmon_channel_info **info;
432
};
433
 
434
/* hwmon_device_register() is deprecated */
435
struct device *hwmon_device_register(struct device *dev);
436
 
437
struct device *
438
hwmon_device_register_with_groups(struct device *dev, const char *name,
439
				  void *drvdata,
440
				  const struct attribute_group **groups);
441
struct device *
442
devm_hwmon_device_register_with_groups(struct device *dev, const char *name,
443
				       void *drvdata,
444
				       const struct attribute_group **groups);
445
struct device *
446
hwmon_device_register_with_info(struct device *dev,
447
				const char *name, void *drvdata,
448
				const struct hwmon_chip_info *info,
449
				const struct attribute_group **extra_groups);
450
struct device *
451
devm_hwmon_device_register_with_info(struct device *dev,
452
				const char *name, void *drvdata,
453
				const struct hwmon_chip_info *info,
454
				const struct attribute_group **extra_groups);
455
 
456
void hwmon_device_unregister(struct device *dev);
457
void devm_hwmon_device_unregister(struct device *dev);
458
 
459
int hwmon_notify_event(struct device *dev, enum hwmon_sensor_types type,
460
		       u32 attr, int channel);
461
 
462
/**
463
 * hwmon_is_bad_char - Is the char invalid in a hwmon name
464
 * @ch: the char to be considered
465
 *
466
 * hwmon_is_bad_char() can be used to determine if the given character
467
 * may not be used in a hwmon name.
468
 *
469
 * Returns true if the char is invalid, false otherwise.
470
 */
471
static inline bool hwmon_is_bad_char(const char ch)
472
{
473
	switch (ch) {
474
	case '-':
475
	case '*':
476
	case ' ':
477
	case '\t':
478
	case '\n':
479
		return true;
480
	default:
481
		return false;
482
	}
483
}
484
 
485
#endif