xref: /openbmc/linux/include/linux/hwmon.h (revision fe6ac237)
1b886d83cSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
21236441fSMark M. Hoffman /*
31236441fSMark M. Hoffman     hwmon.h - part of lm_sensors, Linux kernel modules for hardware monitoring
41236441fSMark M. Hoffman 
51236441fSMark M. Hoffman     This file declares helper functions for the sysfs class "hwmon",
61236441fSMark M. Hoffman     for use by sensors drivers.
71236441fSMark M. Hoffman 
81236441fSMark M. Hoffman     Copyright (C) 2005 Mark M. Hoffman <mhoffman@lightlink.com>
91236441fSMark M. Hoffman 
101236441fSMark M. Hoffman */
111236441fSMark M. Hoffman 
121236441fSMark M. Hoffman #ifndef _HWMON_H_
131236441fSMark M. Hoffman #define _HWMON_H_
141236441fSMark M. Hoffman 
15d560168bSGuenter Roeck #include <linux/bitops.h>
16d560168bSGuenter Roeck 
17313162d0SPaul Gortmaker struct device;
18bab2243cSGuenter Roeck struct attribute_group;
191236441fSMark M. Hoffman 
20d560168bSGuenter Roeck enum hwmon_sensor_types {
21d560168bSGuenter Roeck 	hwmon_chip,
22d560168bSGuenter Roeck 	hwmon_temp,
23d560168bSGuenter Roeck 	hwmon_in,
24d560168bSGuenter Roeck 	hwmon_curr,
25d560168bSGuenter Roeck 	hwmon_power,
26d560168bSGuenter Roeck 	hwmon_energy,
276bfcca44SGuenter Roeck 	hwmon_humidity,
288faee73fSGuenter Roeck 	hwmon_fan,
29f9f7bb3aSGuenter Roeck 	hwmon_pwm,
304413405fSDr. David Alan Gilbert 	hwmon_intrusion,
31d5753800SSudeep Holla 	hwmon_max,
32d560168bSGuenter Roeck };
33d560168bSGuenter Roeck 
34d560168bSGuenter Roeck enum hwmon_chip_attributes {
35d560168bSGuenter Roeck 	hwmon_chip_temp_reset_history,
3600d616cfSGuenter Roeck 	hwmon_chip_in_reset_history,
379b26947cSGuenter Roeck 	hwmon_chip_curr_reset_history,
38b308f5c7SGuenter Roeck 	hwmon_chip_power_reset_history,
39d560168bSGuenter Roeck 	hwmon_chip_register_tz,
40d560168bSGuenter Roeck 	hwmon_chip_update_interval,
41d560168bSGuenter Roeck 	hwmon_chip_alarms,
429f00995eSGuenter Roeck 	hwmon_chip_samples,
439f00995eSGuenter Roeck 	hwmon_chip_curr_samples,
449f00995eSGuenter Roeck 	hwmon_chip_in_samples,
459f00995eSGuenter Roeck 	hwmon_chip_power_samples,
469f00995eSGuenter Roeck 	hwmon_chip_temp_samples,
47*fe6ac237SJames Seo 	hwmon_chip_beep_enable,
48d560168bSGuenter Roeck };
49d560168bSGuenter Roeck 
50d560168bSGuenter Roeck #define HWMON_C_TEMP_RESET_HISTORY	BIT(hwmon_chip_temp_reset_history)
51d560168bSGuenter Roeck #define HWMON_C_IN_RESET_HISTORY	BIT(hwmon_chip_in_reset_history)
529b26947cSGuenter Roeck #define HWMON_C_CURR_RESET_HISTORY	BIT(hwmon_chip_curr_reset_history)
53b308f5c7SGuenter Roeck #define HWMON_C_POWER_RESET_HISTORY	BIT(hwmon_chip_power_reset_history)
54d560168bSGuenter Roeck #define HWMON_C_REGISTER_TZ		BIT(hwmon_chip_register_tz)
55d560168bSGuenter Roeck #define HWMON_C_UPDATE_INTERVAL		BIT(hwmon_chip_update_interval)
56d560168bSGuenter Roeck #define HWMON_C_ALARMS			BIT(hwmon_chip_alarms)
579f00995eSGuenter Roeck #define HWMON_C_SAMPLES			BIT(hwmon_chip_samples)
589f00995eSGuenter Roeck #define HWMON_C_CURR_SAMPLES		BIT(hwmon_chip_curr_samples)
599f00995eSGuenter Roeck #define HWMON_C_IN_SAMPLES		BIT(hwmon_chip_in_samples)
609f00995eSGuenter Roeck #define HWMON_C_POWER_SAMPLES		BIT(hwmon_chip_power_samples)
619f00995eSGuenter Roeck #define HWMON_C_TEMP_SAMPLES		BIT(hwmon_chip_temp_samples)
62*fe6ac237SJames Seo #define HWMON_C_BEEP_ENABLE		BIT(hwmon_chip_beep_enable)
63d560168bSGuenter Roeck 
64d560168bSGuenter Roeck enum hwmon_temp_attributes {
65002c6b54SGuenter Roeck 	hwmon_temp_enable,
66002c6b54SGuenter Roeck 	hwmon_temp_input,
67d560168bSGuenter Roeck 	hwmon_temp_type,
68d560168bSGuenter Roeck 	hwmon_temp_lcrit,
69d560168bSGuenter Roeck 	hwmon_temp_lcrit_hyst,
70d560168bSGuenter Roeck 	hwmon_temp_min,
71d560168bSGuenter Roeck 	hwmon_temp_min_hyst,
72d560168bSGuenter Roeck 	hwmon_temp_max,
73d560168bSGuenter Roeck 	hwmon_temp_max_hyst,
74d560168bSGuenter Roeck 	hwmon_temp_crit,
75d560168bSGuenter Roeck 	hwmon_temp_crit_hyst,
76d560168bSGuenter Roeck 	hwmon_temp_emergency,
77d560168bSGuenter Roeck 	hwmon_temp_emergency_hyst,
78d560168bSGuenter Roeck 	hwmon_temp_alarm,
79d560168bSGuenter Roeck 	hwmon_temp_lcrit_alarm,
80d560168bSGuenter Roeck 	hwmon_temp_min_alarm,
81d560168bSGuenter Roeck 	hwmon_temp_max_alarm,
82d560168bSGuenter Roeck 	hwmon_temp_crit_alarm,
83d560168bSGuenter Roeck 	hwmon_temp_emergency_alarm,
84d560168bSGuenter Roeck 	hwmon_temp_fault,
85d560168bSGuenter Roeck 	hwmon_temp_offset,
86d560168bSGuenter Roeck 	hwmon_temp_label,
87d560168bSGuenter Roeck 	hwmon_temp_lowest,
88d560168bSGuenter Roeck 	hwmon_temp_highest,
89d560168bSGuenter Roeck 	hwmon_temp_reset_history,
901967f712SZbigniew Lukwinski 	hwmon_temp_rated_min,
911967f712SZbigniew Lukwinski 	hwmon_temp_rated_max,
92*fe6ac237SJames Seo 	hwmon_temp_beep,
93d560168bSGuenter Roeck };
94d560168bSGuenter Roeck 
95002c6b54SGuenter Roeck #define HWMON_T_ENABLE		BIT(hwmon_temp_enable)
96d560168bSGuenter Roeck #define HWMON_T_INPUT		BIT(hwmon_temp_input)
97d560168bSGuenter Roeck #define HWMON_T_TYPE		BIT(hwmon_temp_type)
98d560168bSGuenter Roeck #define HWMON_T_LCRIT		BIT(hwmon_temp_lcrit)
99d560168bSGuenter Roeck #define HWMON_T_LCRIT_HYST	BIT(hwmon_temp_lcrit_hyst)
100d560168bSGuenter Roeck #define HWMON_T_MIN		BIT(hwmon_temp_min)
101d560168bSGuenter Roeck #define HWMON_T_MIN_HYST	BIT(hwmon_temp_min_hyst)
102d560168bSGuenter Roeck #define HWMON_T_MAX		BIT(hwmon_temp_max)
103d560168bSGuenter Roeck #define HWMON_T_MAX_HYST	BIT(hwmon_temp_max_hyst)
104d560168bSGuenter Roeck #define HWMON_T_CRIT		BIT(hwmon_temp_crit)
105d560168bSGuenter Roeck #define HWMON_T_CRIT_HYST	BIT(hwmon_temp_crit_hyst)
106d560168bSGuenter Roeck #define HWMON_T_EMERGENCY	BIT(hwmon_temp_emergency)
107d560168bSGuenter Roeck #define HWMON_T_EMERGENCY_HYST	BIT(hwmon_temp_emergency_hyst)
108a5023a99SPeter Huewe #define HWMON_T_ALARM		BIT(hwmon_temp_alarm)
109d560168bSGuenter Roeck #define HWMON_T_MIN_ALARM	BIT(hwmon_temp_min_alarm)
110d560168bSGuenter Roeck #define HWMON_T_MAX_ALARM	BIT(hwmon_temp_max_alarm)
111d560168bSGuenter Roeck #define HWMON_T_CRIT_ALARM	BIT(hwmon_temp_crit_alarm)
1122fe31e43SAndrew Lunn #define HWMON_T_LCRIT_ALARM	BIT(hwmon_temp_lcrit_alarm)
113d560168bSGuenter Roeck #define HWMON_T_EMERGENCY_ALARM	BIT(hwmon_temp_emergency_alarm)
114d560168bSGuenter Roeck #define HWMON_T_FAULT		BIT(hwmon_temp_fault)
115d560168bSGuenter Roeck #define HWMON_T_OFFSET		BIT(hwmon_temp_offset)
116d560168bSGuenter Roeck #define HWMON_T_LABEL		BIT(hwmon_temp_label)
117d560168bSGuenter Roeck #define HWMON_T_LOWEST		BIT(hwmon_temp_lowest)
118d560168bSGuenter Roeck #define HWMON_T_HIGHEST		BIT(hwmon_temp_highest)
119d560168bSGuenter Roeck #define HWMON_T_RESET_HISTORY	BIT(hwmon_temp_reset_history)
1201967f712SZbigniew Lukwinski #define HWMON_T_RATED_MIN	BIT(hwmon_temp_rated_min)
1211967f712SZbigniew Lukwinski #define HWMON_T_RATED_MAX	BIT(hwmon_temp_rated_max)
122*fe6ac237SJames Seo #define HWMON_T_BEEP		BIT(hwmon_temp_beep)
123d560168bSGuenter Roeck 
12400d616cfSGuenter Roeck enum hwmon_in_attributes {
125002c6b54SGuenter Roeck 	hwmon_in_enable,
12600d616cfSGuenter Roeck 	hwmon_in_input,
12700d616cfSGuenter Roeck 	hwmon_in_min,
12800d616cfSGuenter Roeck 	hwmon_in_max,
12900d616cfSGuenter Roeck 	hwmon_in_lcrit,
13000d616cfSGuenter Roeck 	hwmon_in_crit,
13100d616cfSGuenter Roeck 	hwmon_in_average,
13200d616cfSGuenter Roeck 	hwmon_in_lowest,
13300d616cfSGuenter Roeck 	hwmon_in_highest,
13400d616cfSGuenter Roeck 	hwmon_in_reset_history,
13500d616cfSGuenter Roeck 	hwmon_in_label,
13600d616cfSGuenter Roeck 	hwmon_in_alarm,
13700d616cfSGuenter Roeck 	hwmon_in_min_alarm,
13800d616cfSGuenter Roeck 	hwmon_in_max_alarm,
13900d616cfSGuenter Roeck 	hwmon_in_lcrit_alarm,
14000d616cfSGuenter Roeck 	hwmon_in_crit_alarm,
1411967f712SZbigniew Lukwinski 	hwmon_in_rated_min,
1421967f712SZbigniew Lukwinski 	hwmon_in_rated_max,
143*fe6ac237SJames Seo 	hwmon_in_beep,
14400d616cfSGuenter Roeck };
14500d616cfSGuenter Roeck 
146002c6b54SGuenter Roeck #define HWMON_I_ENABLE		BIT(hwmon_in_enable)
14700d616cfSGuenter Roeck #define HWMON_I_INPUT		BIT(hwmon_in_input)
14800d616cfSGuenter Roeck #define HWMON_I_MIN		BIT(hwmon_in_min)
14900d616cfSGuenter Roeck #define HWMON_I_MAX		BIT(hwmon_in_max)
15000d616cfSGuenter Roeck #define HWMON_I_LCRIT		BIT(hwmon_in_lcrit)
15100d616cfSGuenter Roeck #define HWMON_I_CRIT		BIT(hwmon_in_crit)
15200d616cfSGuenter Roeck #define HWMON_I_AVERAGE		BIT(hwmon_in_average)
15300d616cfSGuenter Roeck #define HWMON_I_LOWEST		BIT(hwmon_in_lowest)
15400d616cfSGuenter Roeck #define HWMON_I_HIGHEST		BIT(hwmon_in_highest)
15500d616cfSGuenter Roeck #define HWMON_I_RESET_HISTORY	BIT(hwmon_in_reset_history)
15600d616cfSGuenter Roeck #define HWMON_I_LABEL		BIT(hwmon_in_label)
15700d616cfSGuenter Roeck #define HWMON_I_ALARM		BIT(hwmon_in_alarm)
15800d616cfSGuenter Roeck #define HWMON_I_MIN_ALARM	BIT(hwmon_in_min_alarm)
15900d616cfSGuenter Roeck #define HWMON_I_MAX_ALARM	BIT(hwmon_in_max_alarm)
16000d616cfSGuenter Roeck #define HWMON_I_LCRIT_ALARM	BIT(hwmon_in_lcrit_alarm)
16100d616cfSGuenter Roeck #define HWMON_I_CRIT_ALARM	BIT(hwmon_in_crit_alarm)
1621967f712SZbigniew Lukwinski #define HWMON_I_RATED_MIN	BIT(hwmon_in_rated_min)
1631967f712SZbigniew Lukwinski #define HWMON_I_RATED_MAX	BIT(hwmon_in_rated_max)
164*fe6ac237SJames Seo #define HWMON_I_BEEP		BIT(hwmon_in_beep)
16500d616cfSGuenter Roeck 
1669b26947cSGuenter Roeck enum hwmon_curr_attributes {
167002c6b54SGuenter Roeck 	hwmon_curr_enable,
1689b26947cSGuenter Roeck 	hwmon_curr_input,
1699b26947cSGuenter Roeck 	hwmon_curr_min,
1709b26947cSGuenter Roeck 	hwmon_curr_max,
1719b26947cSGuenter Roeck 	hwmon_curr_lcrit,
1729b26947cSGuenter Roeck 	hwmon_curr_crit,
1739b26947cSGuenter Roeck 	hwmon_curr_average,
1749b26947cSGuenter Roeck 	hwmon_curr_lowest,
1759b26947cSGuenter Roeck 	hwmon_curr_highest,
1769b26947cSGuenter Roeck 	hwmon_curr_reset_history,
1779b26947cSGuenter Roeck 	hwmon_curr_label,
1789b26947cSGuenter Roeck 	hwmon_curr_alarm,
1799b26947cSGuenter Roeck 	hwmon_curr_min_alarm,
1809b26947cSGuenter Roeck 	hwmon_curr_max_alarm,
1819b26947cSGuenter Roeck 	hwmon_curr_lcrit_alarm,
1829b26947cSGuenter Roeck 	hwmon_curr_crit_alarm,
1831967f712SZbigniew Lukwinski 	hwmon_curr_rated_min,
1841967f712SZbigniew Lukwinski 	hwmon_curr_rated_max,
185*fe6ac237SJames Seo 	hwmon_curr_beep,
1869b26947cSGuenter Roeck };
1879b26947cSGuenter Roeck 
188002c6b54SGuenter Roeck #define HWMON_C_ENABLE		BIT(hwmon_curr_enable)
1899b26947cSGuenter Roeck #define HWMON_C_INPUT		BIT(hwmon_curr_input)
1909b26947cSGuenter Roeck #define HWMON_C_MIN		BIT(hwmon_curr_min)
1919b26947cSGuenter Roeck #define HWMON_C_MAX		BIT(hwmon_curr_max)
1929b26947cSGuenter Roeck #define HWMON_C_LCRIT		BIT(hwmon_curr_lcrit)
1939b26947cSGuenter Roeck #define HWMON_C_CRIT		BIT(hwmon_curr_crit)
1949b26947cSGuenter Roeck #define HWMON_C_AVERAGE		BIT(hwmon_curr_average)
1959b26947cSGuenter Roeck #define HWMON_C_LOWEST		BIT(hwmon_curr_lowest)
1969b26947cSGuenter Roeck #define HWMON_C_HIGHEST		BIT(hwmon_curr_highest)
1979b26947cSGuenter Roeck #define HWMON_C_RESET_HISTORY	BIT(hwmon_curr_reset_history)
1989b26947cSGuenter Roeck #define HWMON_C_LABEL		BIT(hwmon_curr_label)
1999b26947cSGuenter Roeck #define HWMON_C_ALARM		BIT(hwmon_curr_alarm)
2009b26947cSGuenter Roeck #define HWMON_C_MIN_ALARM	BIT(hwmon_curr_min_alarm)
2019b26947cSGuenter Roeck #define HWMON_C_MAX_ALARM	BIT(hwmon_curr_max_alarm)
2029b26947cSGuenter Roeck #define HWMON_C_LCRIT_ALARM	BIT(hwmon_curr_lcrit_alarm)
2039b26947cSGuenter Roeck #define HWMON_C_CRIT_ALARM	BIT(hwmon_curr_crit_alarm)
2041967f712SZbigniew Lukwinski #define HWMON_C_RATED_MIN	BIT(hwmon_curr_rated_min)
2051967f712SZbigniew Lukwinski #define HWMON_C_RATED_MAX	BIT(hwmon_curr_rated_max)
206*fe6ac237SJames Seo #define HWMON_C_BEEP		BIT(hwmon_curr_beep)
2079b26947cSGuenter Roeck 
208b308f5c7SGuenter Roeck enum hwmon_power_attributes {
209002c6b54SGuenter Roeck 	hwmon_power_enable,
210b308f5c7SGuenter Roeck 	hwmon_power_average,
211b308f5c7SGuenter Roeck 	hwmon_power_average_interval,
212b308f5c7SGuenter Roeck 	hwmon_power_average_interval_max,
213b308f5c7SGuenter Roeck 	hwmon_power_average_interval_min,
214b308f5c7SGuenter Roeck 	hwmon_power_average_highest,
215b308f5c7SGuenter Roeck 	hwmon_power_average_lowest,
216b308f5c7SGuenter Roeck 	hwmon_power_average_max,
217b308f5c7SGuenter Roeck 	hwmon_power_average_min,
218b308f5c7SGuenter Roeck 	hwmon_power_input,
219b308f5c7SGuenter Roeck 	hwmon_power_input_highest,
220b308f5c7SGuenter Roeck 	hwmon_power_input_lowest,
221b308f5c7SGuenter Roeck 	hwmon_power_reset_history,
222b308f5c7SGuenter Roeck 	hwmon_power_accuracy,
223b308f5c7SGuenter Roeck 	hwmon_power_cap,
224b308f5c7SGuenter Roeck 	hwmon_power_cap_hyst,
225b308f5c7SGuenter Roeck 	hwmon_power_cap_max,
226b308f5c7SGuenter Roeck 	hwmon_power_cap_min,
227aa7f29b0SAndrew Lunn 	hwmon_power_min,
228b308f5c7SGuenter Roeck 	hwmon_power_max,
229b308f5c7SGuenter Roeck 	hwmon_power_crit,
230aa7f29b0SAndrew Lunn 	hwmon_power_lcrit,
231b308f5c7SGuenter Roeck 	hwmon_power_label,
232b308f5c7SGuenter Roeck 	hwmon_power_alarm,
233b308f5c7SGuenter Roeck 	hwmon_power_cap_alarm,
234aa7f29b0SAndrew Lunn 	hwmon_power_min_alarm,
235b308f5c7SGuenter Roeck 	hwmon_power_max_alarm,
236aa7f29b0SAndrew Lunn 	hwmon_power_lcrit_alarm,
237b308f5c7SGuenter Roeck 	hwmon_power_crit_alarm,
2381967f712SZbigniew Lukwinski 	hwmon_power_rated_min,
2391967f712SZbigniew Lukwinski 	hwmon_power_rated_max,
240b308f5c7SGuenter Roeck };
241b308f5c7SGuenter Roeck 
242002c6b54SGuenter Roeck #define HWMON_P_ENABLE			BIT(hwmon_power_enable)
243b308f5c7SGuenter Roeck #define HWMON_P_AVERAGE			BIT(hwmon_power_average)
244b308f5c7SGuenter Roeck #define HWMON_P_AVERAGE_INTERVAL	BIT(hwmon_power_average_interval)
245b308f5c7SGuenter Roeck #define HWMON_P_AVERAGE_INTERVAL_MAX	BIT(hwmon_power_average_interval_max)
246b308f5c7SGuenter Roeck #define HWMON_P_AVERAGE_INTERVAL_MIN	BIT(hwmon_power_average_interval_min)
247b308f5c7SGuenter Roeck #define HWMON_P_AVERAGE_HIGHEST		BIT(hwmon_power_average_highest)
248b308f5c7SGuenter Roeck #define HWMON_P_AVERAGE_LOWEST		BIT(hwmon_power_average_lowest)
249b308f5c7SGuenter Roeck #define HWMON_P_AVERAGE_MAX		BIT(hwmon_power_average_max)
250b308f5c7SGuenter Roeck #define HWMON_P_AVERAGE_MIN		BIT(hwmon_power_average_min)
251b308f5c7SGuenter Roeck #define HWMON_P_INPUT			BIT(hwmon_power_input)
252b308f5c7SGuenter Roeck #define HWMON_P_INPUT_HIGHEST		BIT(hwmon_power_input_highest)
253b308f5c7SGuenter Roeck #define HWMON_P_INPUT_LOWEST		BIT(hwmon_power_input_lowest)
254b308f5c7SGuenter Roeck #define HWMON_P_RESET_HISTORY		BIT(hwmon_power_reset_history)
255b308f5c7SGuenter Roeck #define HWMON_P_ACCURACY		BIT(hwmon_power_accuracy)
256b308f5c7SGuenter Roeck #define HWMON_P_CAP			BIT(hwmon_power_cap)
257b308f5c7SGuenter Roeck #define HWMON_P_CAP_HYST		BIT(hwmon_power_cap_hyst)
258b308f5c7SGuenter Roeck #define HWMON_P_CAP_MAX			BIT(hwmon_power_cap_max)
259b308f5c7SGuenter Roeck #define HWMON_P_CAP_MIN			BIT(hwmon_power_cap_min)
260aa7f29b0SAndrew Lunn #define HWMON_P_MIN			BIT(hwmon_power_min)
261b308f5c7SGuenter Roeck #define HWMON_P_MAX			BIT(hwmon_power_max)
262aa7f29b0SAndrew Lunn #define HWMON_P_LCRIT			BIT(hwmon_power_lcrit)
263b308f5c7SGuenter Roeck #define HWMON_P_CRIT			BIT(hwmon_power_crit)
264b308f5c7SGuenter Roeck #define HWMON_P_LABEL			BIT(hwmon_power_label)
265b308f5c7SGuenter Roeck #define HWMON_P_ALARM			BIT(hwmon_power_alarm)
266b308f5c7SGuenter Roeck #define HWMON_P_CAP_ALARM		BIT(hwmon_power_cap_alarm)
26730945d31SNuno Sá #define HWMON_P_MIN_ALARM		BIT(hwmon_power_min_alarm)
268b308f5c7SGuenter Roeck #define HWMON_P_MAX_ALARM		BIT(hwmon_power_max_alarm)
269aa7f29b0SAndrew Lunn #define HWMON_P_LCRIT_ALARM		BIT(hwmon_power_lcrit_alarm)
270b308f5c7SGuenter Roeck #define HWMON_P_CRIT_ALARM		BIT(hwmon_power_crit_alarm)
2711967f712SZbigniew Lukwinski #define HWMON_P_RATED_MIN		BIT(hwmon_power_rated_min)
2721967f712SZbigniew Lukwinski #define HWMON_P_RATED_MAX		BIT(hwmon_power_rated_max)
273b308f5c7SGuenter Roeck 
2746bfcca44SGuenter Roeck enum hwmon_energy_attributes {
275002c6b54SGuenter Roeck 	hwmon_energy_enable,
2766bfcca44SGuenter Roeck 	hwmon_energy_input,
2776bfcca44SGuenter Roeck 	hwmon_energy_label,
2786bfcca44SGuenter Roeck };
2796bfcca44SGuenter Roeck 
280002c6b54SGuenter Roeck #define HWMON_E_ENABLE			BIT(hwmon_energy_enable)
2816bfcca44SGuenter Roeck #define HWMON_E_INPUT			BIT(hwmon_energy_input)
2826bfcca44SGuenter Roeck #define HWMON_E_LABEL			BIT(hwmon_energy_label)
2836bfcca44SGuenter Roeck 
2846bfcca44SGuenter Roeck enum hwmon_humidity_attributes {
285002c6b54SGuenter Roeck 	hwmon_humidity_enable,
2866bfcca44SGuenter Roeck 	hwmon_humidity_input,
2876bfcca44SGuenter Roeck 	hwmon_humidity_label,
2886bfcca44SGuenter Roeck 	hwmon_humidity_min,
2896bfcca44SGuenter Roeck 	hwmon_humidity_min_hyst,
2906bfcca44SGuenter Roeck 	hwmon_humidity_max,
2916bfcca44SGuenter Roeck 	hwmon_humidity_max_hyst,
2926bfcca44SGuenter Roeck 	hwmon_humidity_alarm,
2936bfcca44SGuenter Roeck 	hwmon_humidity_fault,
2941967f712SZbigniew Lukwinski 	hwmon_humidity_rated_min,
2951967f712SZbigniew Lukwinski 	hwmon_humidity_rated_max,
2966bfcca44SGuenter Roeck };
2976bfcca44SGuenter Roeck 
298002c6b54SGuenter Roeck #define HWMON_H_ENABLE			BIT(hwmon_humidity_enable)
2996bfcca44SGuenter Roeck #define HWMON_H_INPUT			BIT(hwmon_humidity_input)
3006bfcca44SGuenter Roeck #define HWMON_H_LABEL			BIT(hwmon_humidity_label)
3016bfcca44SGuenter Roeck #define HWMON_H_MIN			BIT(hwmon_humidity_min)
3026bfcca44SGuenter Roeck #define HWMON_H_MIN_HYST		BIT(hwmon_humidity_min_hyst)
3036bfcca44SGuenter Roeck #define HWMON_H_MAX			BIT(hwmon_humidity_max)
3046bfcca44SGuenter Roeck #define HWMON_H_MAX_HYST		BIT(hwmon_humidity_max_hyst)
3056bfcca44SGuenter Roeck #define HWMON_H_ALARM			BIT(hwmon_humidity_alarm)
3066bfcca44SGuenter Roeck #define HWMON_H_FAULT			BIT(hwmon_humidity_fault)
3071967f712SZbigniew Lukwinski #define HWMON_H_RATED_MIN		BIT(hwmon_humidity_rated_min)
3081967f712SZbigniew Lukwinski #define HWMON_H_RATED_MAX		BIT(hwmon_humidity_rated_max)
3096bfcca44SGuenter Roeck 
3108faee73fSGuenter Roeck enum hwmon_fan_attributes {
311002c6b54SGuenter Roeck 	hwmon_fan_enable,
3128faee73fSGuenter Roeck 	hwmon_fan_input,
3138faee73fSGuenter Roeck 	hwmon_fan_label,
3148faee73fSGuenter Roeck 	hwmon_fan_min,
3158faee73fSGuenter Roeck 	hwmon_fan_max,
3168faee73fSGuenter Roeck 	hwmon_fan_div,
3178faee73fSGuenter Roeck 	hwmon_fan_pulses,
3188faee73fSGuenter Roeck 	hwmon_fan_target,
3198faee73fSGuenter Roeck 	hwmon_fan_alarm,
3208faee73fSGuenter Roeck 	hwmon_fan_min_alarm,
3218faee73fSGuenter Roeck 	hwmon_fan_max_alarm,
3228faee73fSGuenter Roeck 	hwmon_fan_fault,
323*fe6ac237SJames Seo 	hwmon_fan_beep,
3248faee73fSGuenter Roeck };
3258faee73fSGuenter Roeck 
326002c6b54SGuenter Roeck #define HWMON_F_ENABLE			BIT(hwmon_fan_enable)
3278faee73fSGuenter Roeck #define HWMON_F_INPUT			BIT(hwmon_fan_input)
3288faee73fSGuenter Roeck #define HWMON_F_LABEL			BIT(hwmon_fan_label)
3298faee73fSGuenter Roeck #define HWMON_F_MIN			BIT(hwmon_fan_min)
3308faee73fSGuenter Roeck #define HWMON_F_MAX			BIT(hwmon_fan_max)
3318faee73fSGuenter Roeck #define HWMON_F_DIV			BIT(hwmon_fan_div)
3328faee73fSGuenter Roeck #define HWMON_F_PULSES			BIT(hwmon_fan_pulses)
3338faee73fSGuenter Roeck #define HWMON_F_TARGET			BIT(hwmon_fan_target)
3348faee73fSGuenter Roeck #define HWMON_F_ALARM			BIT(hwmon_fan_alarm)
3358faee73fSGuenter Roeck #define HWMON_F_MIN_ALARM		BIT(hwmon_fan_min_alarm)
3368faee73fSGuenter Roeck #define HWMON_F_MAX_ALARM		BIT(hwmon_fan_max_alarm)
3378faee73fSGuenter Roeck #define HWMON_F_FAULT			BIT(hwmon_fan_fault)
338*fe6ac237SJames Seo #define HWMON_F_BEEP			BIT(hwmon_fan_beep)
3398faee73fSGuenter Roeck 
340f9f7bb3aSGuenter Roeck enum hwmon_pwm_attributes {
341f9f7bb3aSGuenter Roeck 	hwmon_pwm_input,
342f9f7bb3aSGuenter Roeck 	hwmon_pwm_enable,
343f9f7bb3aSGuenter Roeck 	hwmon_pwm_mode,
344f9f7bb3aSGuenter Roeck 	hwmon_pwm_freq,
345e75d16e5SArmin Wolf 	hwmon_pwm_auto_channels_temp,
346f9f7bb3aSGuenter Roeck };
347f9f7bb3aSGuenter Roeck 
348f9f7bb3aSGuenter Roeck #define HWMON_PWM_INPUT			BIT(hwmon_pwm_input)
349f9f7bb3aSGuenter Roeck #define HWMON_PWM_ENABLE		BIT(hwmon_pwm_enable)
350f9f7bb3aSGuenter Roeck #define HWMON_PWM_MODE			BIT(hwmon_pwm_mode)
351f9f7bb3aSGuenter Roeck #define HWMON_PWM_FREQ			BIT(hwmon_pwm_freq)
352e75d16e5SArmin Wolf #define HWMON_PWM_AUTO_CHANNELS_TEMP	BIT(hwmon_pwm_auto_channels_temp)
353f9f7bb3aSGuenter Roeck 
3544413405fSDr. David Alan Gilbert enum hwmon_intrusion_attributes {
3554413405fSDr. David Alan Gilbert 	hwmon_intrusion_alarm,
3564413405fSDr. David Alan Gilbert 	hwmon_intrusion_beep,
3574413405fSDr. David Alan Gilbert };
3584413405fSDr. David Alan Gilbert #define HWMON_INTRUSION_ALARM		BIT(hwmon_intrusion_alarm)
3594413405fSDr. David Alan Gilbert #define HWMON_INTRUSION_BEEP		BIT(hwmon_intrusion_beep)
3604413405fSDr. David Alan Gilbert 
361d560168bSGuenter Roeck /**
362d560168bSGuenter Roeck  * struct hwmon_ops - hwmon device operations
363d560168bSGuenter Roeck  * @is_visible: Callback to return attribute visibility. Mandatory.
364d560168bSGuenter Roeck  *		Parameters are:
365d560168bSGuenter Roeck  *		@const void *drvdata:
366d560168bSGuenter Roeck  *			Pointer to driver-private data structure passed
367d560168bSGuenter Roeck  *			as argument to hwmon_device_register_with_info().
368d560168bSGuenter Roeck  *		@type:	Sensor type
369d560168bSGuenter Roeck  *		@attr:	Sensor attribute
370d560168bSGuenter Roeck  *		@channel:
371d560168bSGuenter Roeck  *			Channel number
372d560168bSGuenter Roeck  *		The function returns the file permissions.
373d560168bSGuenter Roeck  *		If the return value is 0, no attribute will be created.
374e159ab5cSGuenter Roeck  * @read:	Read callback for data attributes. Mandatory if readable
375e159ab5cSGuenter Roeck  *		data attributes are present.
376d560168bSGuenter Roeck  *		Parameters are:
377d560168bSGuenter Roeck  *		@dev:	Pointer to hardware monitoring device
378d560168bSGuenter Roeck  *		@type:	Sensor type
379d560168bSGuenter Roeck  *		@attr:	Sensor attribute
380d560168bSGuenter Roeck  *		@channel:
381d560168bSGuenter Roeck  *			Channel number
382d560168bSGuenter Roeck  *		@val:	Pointer to returned value
383d560168bSGuenter Roeck  *		The function returns 0 on success or a negative error number.
384e159ab5cSGuenter Roeck  * @read_string:
385e159ab5cSGuenter Roeck  *		Read callback for string attributes. Mandatory if string
386e159ab5cSGuenter Roeck  *		attributes are present.
387e159ab5cSGuenter Roeck  *		Parameters are:
388e159ab5cSGuenter Roeck  *		@dev:	Pointer to hardware monitoring device
389e159ab5cSGuenter Roeck  *		@type:	Sensor type
390e159ab5cSGuenter Roeck  *		@attr:	Sensor attribute
391e159ab5cSGuenter Roeck  *		@channel:
392e159ab5cSGuenter Roeck  *			Channel number
393e159ab5cSGuenter Roeck  *		@str:	Pointer to returned string
394e159ab5cSGuenter Roeck  *		The function returns 0 on success or a negative error number.
395e159ab5cSGuenter Roeck  * @write:	Write callback for data attributes. Mandatory if writeable
396e159ab5cSGuenter Roeck  *		data attributes are present.
397d560168bSGuenter Roeck  *		Parameters are:
398d560168bSGuenter Roeck  *		@dev:	Pointer to hardware monitoring device
399d560168bSGuenter Roeck  *		@type:	Sensor type
400d560168bSGuenter Roeck  *		@attr:	Sensor attribute
401d560168bSGuenter Roeck  *		@channel:
402d560168bSGuenter Roeck  *			Channel number
403d560168bSGuenter Roeck  *		@val:	Value to write
404d560168bSGuenter Roeck  *		The function returns 0 on success or a negative error number.
405d560168bSGuenter Roeck  */
406d560168bSGuenter Roeck struct hwmon_ops {
407d560168bSGuenter Roeck 	umode_t (*is_visible)(const void *drvdata, enum hwmon_sensor_types type,
408d560168bSGuenter Roeck 			      u32 attr, int channel);
409d560168bSGuenter Roeck 	int (*read)(struct device *dev, enum hwmon_sensor_types type,
410d560168bSGuenter Roeck 		    u32 attr, int channel, long *val);
411e159ab5cSGuenter Roeck 	int (*read_string)(struct device *dev, enum hwmon_sensor_types type,
4125ba6bcbcSJean Delvare 		    u32 attr, int channel, const char **str);
413d560168bSGuenter Roeck 	int (*write)(struct device *dev, enum hwmon_sensor_types type,
414d560168bSGuenter Roeck 		     u32 attr, int channel, long val);
415d560168bSGuenter Roeck };
416d560168bSGuenter Roeck 
417d560168bSGuenter Roeck /**
418130d1688SLukas Bulwahn  * struct hwmon_channel_info - Channel information
419d560168bSGuenter Roeck  * @type:	Channel type.
420d560168bSGuenter Roeck  * @config:	Pointer to NULL-terminated list of channel parameters.
421d560168bSGuenter Roeck  *		Use for per-channel attributes.
422d560168bSGuenter Roeck  */
423d560168bSGuenter Roeck struct hwmon_channel_info {
424d560168bSGuenter Roeck 	enum hwmon_sensor_types type;
425d560168bSGuenter Roeck 	const u32 *config;
426d560168bSGuenter Roeck };
427d560168bSGuenter Roeck 
428c43a113cSCharles Keepax #define HWMON_CHANNEL_INFO(stype, ...)	\
429c43a113cSCharles Keepax 	(&(struct hwmon_channel_info) {	\
430c43a113cSCharles Keepax 		.type = hwmon_##stype,	\
431c43a113cSCharles Keepax 		.config = (u32 []) {	\
432c43a113cSCharles Keepax 			__VA_ARGS__, 0	\
433c43a113cSCharles Keepax 		}			\
434c43a113cSCharles Keepax 	})
435c43a113cSCharles Keepax 
436d560168bSGuenter Roeck /**
437130d1688SLukas Bulwahn  * struct hwmon_chip_info - Chip configuration
438d560168bSGuenter Roeck  * @ops:	Pointer to hwmon operations.
439d560168bSGuenter Roeck  * @info:	Null-terminated list of channel information.
440d560168bSGuenter Roeck  */
441d560168bSGuenter Roeck struct hwmon_chip_info {
442d560168bSGuenter Roeck 	const struct hwmon_ops *ops;
443d8cc9415SKrzysztof Kozlowski 	const struct hwmon_channel_info * const *info;
444d560168bSGuenter Roeck };
445d560168bSGuenter Roeck 
446af1bd36cSGuenter Roeck /* hwmon_device_register() is deprecated */
4471beeffe4STony Jones struct device *hwmon_device_register(struct device *dev);
448af1bd36cSGuenter Roeck 
4495720a18bSGuenter Roeck /*
4505720a18bSGuenter Roeck  * hwmon_device_register_with_groups() and
4515720a18bSGuenter Roeck  * devm_hwmon_device_register_with_groups() are deprecated.
4525720a18bSGuenter Roeck  */
453bab2243cSGuenter Roeck struct device *
454bab2243cSGuenter Roeck hwmon_device_register_with_groups(struct device *dev, const char *name,
455bab2243cSGuenter Roeck 				  void *drvdata,
456bab2243cSGuenter Roeck 				  const struct attribute_group **groups);
45774188cbaSGuenter Roeck struct device *
45874188cbaSGuenter Roeck devm_hwmon_device_register_with_groups(struct device *dev, const char *name,
45974188cbaSGuenter Roeck 				       void *drvdata,
46074188cbaSGuenter Roeck 				       const struct attribute_group **groups);
461d560168bSGuenter Roeck struct device *
462d560168bSGuenter Roeck hwmon_device_register_with_info(struct device *dev,
463d560168bSGuenter Roeck 				const char *name, void *drvdata,
464d560168bSGuenter Roeck 				const struct hwmon_chip_info *info,
465848ba0a2SGuenter Roeck 				const struct attribute_group **extra_groups);
466d560168bSGuenter Roeck struct device *
467e5d21072SGuenter Roeck hwmon_device_register_for_thermal(struct device *dev, const char *name,
468e5d21072SGuenter Roeck 				  void *drvdata);
469e5d21072SGuenter Roeck struct device *
470d560168bSGuenter Roeck devm_hwmon_device_register_with_info(struct device *dev,
471d560168bSGuenter Roeck 				const char *name, void *drvdata,
472d560168bSGuenter Roeck 				const struct hwmon_chip_info *info,
473848ba0a2SGuenter Roeck 				const struct attribute_group **extra_groups);
4741236441fSMark M. Hoffman 
4751beeffe4STony Jones void hwmon_device_unregister(struct device *dev);
47674188cbaSGuenter Roeck void devm_hwmon_device_unregister(struct device *dev);
4771236441fSMark M. Hoffman 
4781597b374SGuenter Roeck int hwmon_notify_event(struct device *dev, enum hwmon_sensor_types type,
4791597b374SGuenter Roeck 		       u32 attr, int channel);
4801597b374SGuenter Roeck 
4811ad6c3b7SMichael Walle char *hwmon_sanitize_name(const char *name);
4821ad6c3b7SMichael Walle char *devm_hwmon_sanitize_name(struct device *dev, const char *name);
4831ad6c3b7SMichael Walle 
484dcb5d0fcSAndrew Lunn /**
485dcb5d0fcSAndrew Lunn  * hwmon_is_bad_char - Is the char invalid in a hwmon name
486dcb5d0fcSAndrew Lunn  * @ch: the char to be considered
487dcb5d0fcSAndrew Lunn  *
488dcb5d0fcSAndrew Lunn  * hwmon_is_bad_char() can be used to determine if the given character
489dcb5d0fcSAndrew Lunn  * may not be used in a hwmon name.
490dcb5d0fcSAndrew Lunn  *
491dcb5d0fcSAndrew Lunn  * Returns true if the char is invalid, false otherwise.
492dcb5d0fcSAndrew Lunn  */
hwmon_is_bad_char(const char ch)493dcb5d0fcSAndrew Lunn static inline bool hwmon_is_bad_char(const char ch)
494dcb5d0fcSAndrew Lunn {
495dcb5d0fcSAndrew Lunn 	switch (ch) {
496dcb5d0fcSAndrew Lunn 	case '-':
497dcb5d0fcSAndrew Lunn 	case '*':
498dcb5d0fcSAndrew Lunn 	case ' ':
499dcb5d0fcSAndrew Lunn 	case '\t':
500dcb5d0fcSAndrew Lunn 	case '\n':
501dcb5d0fcSAndrew Lunn 		return true;
502dcb5d0fcSAndrew Lunn 	default:
503dcb5d0fcSAndrew Lunn 		return false;
504dcb5d0fcSAndrew Lunn 	}
505dcb5d0fcSAndrew Lunn }
506dcb5d0fcSAndrew Lunn 
5071236441fSMark M. Hoffman #endif
508