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 <[email protected]>
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,
47fe6ac237SJames Seo hwmon_chip_beep_enable,
484ce6e8a8SGuenter Roeck hwmon_chip_pec,
49d560168bSGuenter Roeck };
50d560168bSGuenter Roeck
51d560168bSGuenter Roeck #define HWMON_C_TEMP_RESET_HISTORY BIT(hwmon_chip_temp_reset_history)
52d560168bSGuenter Roeck #define HWMON_C_IN_RESET_HISTORY BIT(hwmon_chip_in_reset_history)
539b26947cSGuenter Roeck #define HWMON_C_CURR_RESET_HISTORY BIT(hwmon_chip_curr_reset_history)
54b308f5c7SGuenter Roeck #define HWMON_C_POWER_RESET_HISTORY BIT(hwmon_chip_power_reset_history)
55d560168bSGuenter Roeck #define HWMON_C_REGISTER_TZ BIT(hwmon_chip_register_tz)
56d560168bSGuenter Roeck #define HWMON_C_UPDATE_INTERVAL BIT(hwmon_chip_update_interval)
57d560168bSGuenter Roeck #define HWMON_C_ALARMS BIT(hwmon_chip_alarms)
589f00995eSGuenter Roeck #define HWMON_C_SAMPLES BIT(hwmon_chip_samples)
599f00995eSGuenter Roeck #define HWMON_C_CURR_SAMPLES BIT(hwmon_chip_curr_samples)
609f00995eSGuenter Roeck #define HWMON_C_IN_SAMPLES BIT(hwmon_chip_in_samples)
619f00995eSGuenter Roeck #define HWMON_C_POWER_SAMPLES BIT(hwmon_chip_power_samples)
629f00995eSGuenter Roeck #define HWMON_C_TEMP_SAMPLES BIT(hwmon_chip_temp_samples)
63fe6ac237SJames Seo #define HWMON_C_BEEP_ENABLE BIT(hwmon_chip_beep_enable)
644ce6e8a8SGuenter Roeck #define HWMON_C_PEC BIT(hwmon_chip_pec)
65d560168bSGuenter Roeck
66d560168bSGuenter Roeck enum hwmon_temp_attributes {
67002c6b54SGuenter Roeck hwmon_temp_enable,
68002c6b54SGuenter Roeck hwmon_temp_input,
69d560168bSGuenter Roeck hwmon_temp_type,
70d560168bSGuenter Roeck hwmon_temp_lcrit,
71d560168bSGuenter Roeck hwmon_temp_lcrit_hyst,
72d560168bSGuenter Roeck hwmon_temp_min,
73d560168bSGuenter Roeck hwmon_temp_min_hyst,
74d560168bSGuenter Roeck hwmon_temp_max,
75d560168bSGuenter Roeck hwmon_temp_max_hyst,
76d560168bSGuenter Roeck hwmon_temp_crit,
77d560168bSGuenter Roeck hwmon_temp_crit_hyst,
78d560168bSGuenter Roeck hwmon_temp_emergency,
79d560168bSGuenter Roeck hwmon_temp_emergency_hyst,
80d560168bSGuenter Roeck hwmon_temp_alarm,
81d560168bSGuenter Roeck hwmon_temp_lcrit_alarm,
82d560168bSGuenter Roeck hwmon_temp_min_alarm,
83d560168bSGuenter Roeck hwmon_temp_max_alarm,
84d560168bSGuenter Roeck hwmon_temp_crit_alarm,
85d560168bSGuenter Roeck hwmon_temp_emergency_alarm,
86d560168bSGuenter Roeck hwmon_temp_fault,
87d560168bSGuenter Roeck hwmon_temp_offset,
88d560168bSGuenter Roeck hwmon_temp_label,
89d560168bSGuenter Roeck hwmon_temp_lowest,
90d560168bSGuenter Roeck hwmon_temp_highest,
91d560168bSGuenter Roeck hwmon_temp_reset_history,
921967f712SZbigniew Lukwinski hwmon_temp_rated_min,
931967f712SZbigniew Lukwinski hwmon_temp_rated_max,
94fe6ac237SJames Seo hwmon_temp_beep,
95d560168bSGuenter Roeck };
96d560168bSGuenter Roeck
97002c6b54SGuenter Roeck #define HWMON_T_ENABLE BIT(hwmon_temp_enable)
98d560168bSGuenter Roeck #define HWMON_T_INPUT BIT(hwmon_temp_input)
99d560168bSGuenter Roeck #define HWMON_T_TYPE BIT(hwmon_temp_type)
100d560168bSGuenter Roeck #define HWMON_T_LCRIT BIT(hwmon_temp_lcrit)
101d560168bSGuenter Roeck #define HWMON_T_LCRIT_HYST BIT(hwmon_temp_lcrit_hyst)
102d560168bSGuenter Roeck #define HWMON_T_MIN BIT(hwmon_temp_min)
103d560168bSGuenter Roeck #define HWMON_T_MIN_HYST BIT(hwmon_temp_min_hyst)
104d560168bSGuenter Roeck #define HWMON_T_MAX BIT(hwmon_temp_max)
105d560168bSGuenter Roeck #define HWMON_T_MAX_HYST BIT(hwmon_temp_max_hyst)
106d560168bSGuenter Roeck #define HWMON_T_CRIT BIT(hwmon_temp_crit)
107d560168bSGuenter Roeck #define HWMON_T_CRIT_HYST BIT(hwmon_temp_crit_hyst)
108d560168bSGuenter Roeck #define HWMON_T_EMERGENCY BIT(hwmon_temp_emergency)
109d560168bSGuenter Roeck #define HWMON_T_EMERGENCY_HYST BIT(hwmon_temp_emergency_hyst)
110a5023a99SPeter Huewe #define HWMON_T_ALARM BIT(hwmon_temp_alarm)
111d560168bSGuenter Roeck #define HWMON_T_MIN_ALARM BIT(hwmon_temp_min_alarm)
112d560168bSGuenter Roeck #define HWMON_T_MAX_ALARM BIT(hwmon_temp_max_alarm)
113d560168bSGuenter Roeck #define HWMON_T_CRIT_ALARM BIT(hwmon_temp_crit_alarm)
1142fe31e43SAndrew Lunn #define HWMON_T_LCRIT_ALARM BIT(hwmon_temp_lcrit_alarm)
115d560168bSGuenter Roeck #define HWMON_T_EMERGENCY_ALARM BIT(hwmon_temp_emergency_alarm)
116d560168bSGuenter Roeck #define HWMON_T_FAULT BIT(hwmon_temp_fault)
117d560168bSGuenter Roeck #define HWMON_T_OFFSET BIT(hwmon_temp_offset)
118d560168bSGuenter Roeck #define HWMON_T_LABEL BIT(hwmon_temp_label)
119d560168bSGuenter Roeck #define HWMON_T_LOWEST BIT(hwmon_temp_lowest)
120d560168bSGuenter Roeck #define HWMON_T_HIGHEST BIT(hwmon_temp_highest)
121d560168bSGuenter Roeck #define HWMON_T_RESET_HISTORY BIT(hwmon_temp_reset_history)
1221967f712SZbigniew Lukwinski #define HWMON_T_RATED_MIN BIT(hwmon_temp_rated_min)
1231967f712SZbigniew Lukwinski #define HWMON_T_RATED_MAX BIT(hwmon_temp_rated_max)
124fe6ac237SJames Seo #define HWMON_T_BEEP BIT(hwmon_temp_beep)
125d560168bSGuenter Roeck
12600d616cfSGuenter Roeck enum hwmon_in_attributes {
127002c6b54SGuenter Roeck hwmon_in_enable,
12800d616cfSGuenter Roeck hwmon_in_input,
12900d616cfSGuenter Roeck hwmon_in_min,
13000d616cfSGuenter Roeck hwmon_in_max,
13100d616cfSGuenter Roeck hwmon_in_lcrit,
13200d616cfSGuenter Roeck hwmon_in_crit,
13300d616cfSGuenter Roeck hwmon_in_average,
13400d616cfSGuenter Roeck hwmon_in_lowest,
13500d616cfSGuenter Roeck hwmon_in_highest,
13600d616cfSGuenter Roeck hwmon_in_reset_history,
13700d616cfSGuenter Roeck hwmon_in_label,
13800d616cfSGuenter Roeck hwmon_in_alarm,
13900d616cfSGuenter Roeck hwmon_in_min_alarm,
14000d616cfSGuenter Roeck hwmon_in_max_alarm,
14100d616cfSGuenter Roeck hwmon_in_lcrit_alarm,
14200d616cfSGuenter Roeck hwmon_in_crit_alarm,
1431967f712SZbigniew Lukwinski hwmon_in_rated_min,
1441967f712SZbigniew Lukwinski hwmon_in_rated_max,
145fe6ac237SJames Seo hwmon_in_beep,
14635c1bfb9SNuno Sa hwmon_in_fault,
14700d616cfSGuenter Roeck };
14800d616cfSGuenter Roeck
149002c6b54SGuenter Roeck #define HWMON_I_ENABLE BIT(hwmon_in_enable)
15000d616cfSGuenter Roeck #define HWMON_I_INPUT BIT(hwmon_in_input)
15100d616cfSGuenter Roeck #define HWMON_I_MIN BIT(hwmon_in_min)
15200d616cfSGuenter Roeck #define HWMON_I_MAX BIT(hwmon_in_max)
15300d616cfSGuenter Roeck #define HWMON_I_LCRIT BIT(hwmon_in_lcrit)
15400d616cfSGuenter Roeck #define HWMON_I_CRIT BIT(hwmon_in_crit)
15500d616cfSGuenter Roeck #define HWMON_I_AVERAGE BIT(hwmon_in_average)
15600d616cfSGuenter Roeck #define HWMON_I_LOWEST BIT(hwmon_in_lowest)
15700d616cfSGuenter Roeck #define HWMON_I_HIGHEST BIT(hwmon_in_highest)
15800d616cfSGuenter Roeck #define HWMON_I_RESET_HISTORY BIT(hwmon_in_reset_history)
15900d616cfSGuenter Roeck #define HWMON_I_LABEL BIT(hwmon_in_label)
16000d616cfSGuenter Roeck #define HWMON_I_ALARM BIT(hwmon_in_alarm)
16100d616cfSGuenter Roeck #define HWMON_I_MIN_ALARM BIT(hwmon_in_min_alarm)
16200d616cfSGuenter Roeck #define HWMON_I_MAX_ALARM BIT(hwmon_in_max_alarm)
16300d616cfSGuenter Roeck #define HWMON_I_LCRIT_ALARM BIT(hwmon_in_lcrit_alarm)
16400d616cfSGuenter Roeck #define HWMON_I_CRIT_ALARM BIT(hwmon_in_crit_alarm)
1651967f712SZbigniew Lukwinski #define HWMON_I_RATED_MIN BIT(hwmon_in_rated_min)
1661967f712SZbigniew Lukwinski #define HWMON_I_RATED_MAX BIT(hwmon_in_rated_max)
167fe6ac237SJames Seo #define HWMON_I_BEEP BIT(hwmon_in_beep)
16835c1bfb9SNuno Sa #define HWMON_I_FAULT BIT(hwmon_in_fault)
16900d616cfSGuenter Roeck
1709b26947cSGuenter Roeck enum hwmon_curr_attributes {
171002c6b54SGuenter Roeck hwmon_curr_enable,
1729b26947cSGuenter Roeck hwmon_curr_input,
1739b26947cSGuenter Roeck hwmon_curr_min,
1749b26947cSGuenter Roeck hwmon_curr_max,
1759b26947cSGuenter Roeck hwmon_curr_lcrit,
1769b26947cSGuenter Roeck hwmon_curr_crit,
1779b26947cSGuenter Roeck hwmon_curr_average,
1789b26947cSGuenter Roeck hwmon_curr_lowest,
1799b26947cSGuenter Roeck hwmon_curr_highest,
1809b26947cSGuenter Roeck hwmon_curr_reset_history,
1819b26947cSGuenter Roeck hwmon_curr_label,
1829b26947cSGuenter Roeck hwmon_curr_alarm,
1839b26947cSGuenter Roeck hwmon_curr_min_alarm,
1849b26947cSGuenter Roeck hwmon_curr_max_alarm,
1859b26947cSGuenter Roeck hwmon_curr_lcrit_alarm,
1869b26947cSGuenter Roeck hwmon_curr_crit_alarm,
1871967f712SZbigniew Lukwinski hwmon_curr_rated_min,
1881967f712SZbigniew Lukwinski hwmon_curr_rated_max,
189fe6ac237SJames Seo hwmon_curr_beep,
1909b26947cSGuenter Roeck };
1919b26947cSGuenter Roeck
192002c6b54SGuenter Roeck #define HWMON_C_ENABLE BIT(hwmon_curr_enable)
1939b26947cSGuenter Roeck #define HWMON_C_INPUT BIT(hwmon_curr_input)
1949b26947cSGuenter Roeck #define HWMON_C_MIN BIT(hwmon_curr_min)
1959b26947cSGuenter Roeck #define HWMON_C_MAX BIT(hwmon_curr_max)
1969b26947cSGuenter Roeck #define HWMON_C_LCRIT BIT(hwmon_curr_lcrit)
1979b26947cSGuenter Roeck #define HWMON_C_CRIT BIT(hwmon_curr_crit)
1989b26947cSGuenter Roeck #define HWMON_C_AVERAGE BIT(hwmon_curr_average)
1999b26947cSGuenter Roeck #define HWMON_C_LOWEST BIT(hwmon_curr_lowest)
2009b26947cSGuenter Roeck #define HWMON_C_HIGHEST BIT(hwmon_curr_highest)
2019b26947cSGuenter Roeck #define HWMON_C_RESET_HISTORY BIT(hwmon_curr_reset_history)
2029b26947cSGuenter Roeck #define HWMON_C_LABEL BIT(hwmon_curr_label)
2039b26947cSGuenter Roeck #define HWMON_C_ALARM BIT(hwmon_curr_alarm)
2049b26947cSGuenter Roeck #define HWMON_C_MIN_ALARM BIT(hwmon_curr_min_alarm)
2059b26947cSGuenter Roeck #define HWMON_C_MAX_ALARM BIT(hwmon_curr_max_alarm)
2069b26947cSGuenter Roeck #define HWMON_C_LCRIT_ALARM BIT(hwmon_curr_lcrit_alarm)
2079b26947cSGuenter Roeck #define HWMON_C_CRIT_ALARM BIT(hwmon_curr_crit_alarm)
2081967f712SZbigniew Lukwinski #define HWMON_C_RATED_MIN BIT(hwmon_curr_rated_min)
2091967f712SZbigniew Lukwinski #define HWMON_C_RATED_MAX BIT(hwmon_curr_rated_max)
210fe6ac237SJames Seo #define HWMON_C_BEEP BIT(hwmon_curr_beep)
2119b26947cSGuenter Roeck
212b308f5c7SGuenter Roeck enum hwmon_power_attributes {
213002c6b54SGuenter Roeck hwmon_power_enable,
214b308f5c7SGuenter Roeck hwmon_power_average,
215b308f5c7SGuenter Roeck hwmon_power_average_interval,
216b308f5c7SGuenter Roeck hwmon_power_average_interval_max,
217b308f5c7SGuenter Roeck hwmon_power_average_interval_min,
218b308f5c7SGuenter Roeck hwmon_power_average_highest,
219b308f5c7SGuenter Roeck hwmon_power_average_lowest,
220b308f5c7SGuenter Roeck hwmon_power_average_max,
221b308f5c7SGuenter Roeck hwmon_power_average_min,
222b308f5c7SGuenter Roeck hwmon_power_input,
223b308f5c7SGuenter Roeck hwmon_power_input_highest,
224b308f5c7SGuenter Roeck hwmon_power_input_lowest,
225b308f5c7SGuenter Roeck hwmon_power_reset_history,
226b308f5c7SGuenter Roeck hwmon_power_accuracy,
227b308f5c7SGuenter Roeck hwmon_power_cap,
228b308f5c7SGuenter Roeck hwmon_power_cap_hyst,
229b308f5c7SGuenter Roeck hwmon_power_cap_max,
230b308f5c7SGuenter Roeck hwmon_power_cap_min,
231aa7f29b0SAndrew Lunn hwmon_power_min,
232b308f5c7SGuenter Roeck hwmon_power_max,
233b308f5c7SGuenter Roeck hwmon_power_crit,
234aa7f29b0SAndrew Lunn hwmon_power_lcrit,
235b308f5c7SGuenter Roeck hwmon_power_label,
236b308f5c7SGuenter Roeck hwmon_power_alarm,
237b308f5c7SGuenter Roeck hwmon_power_cap_alarm,
238aa7f29b0SAndrew Lunn hwmon_power_min_alarm,
239b308f5c7SGuenter Roeck hwmon_power_max_alarm,
240aa7f29b0SAndrew Lunn hwmon_power_lcrit_alarm,
241b308f5c7SGuenter Roeck hwmon_power_crit_alarm,
2421967f712SZbigniew Lukwinski hwmon_power_rated_min,
2431967f712SZbigniew Lukwinski hwmon_power_rated_max,
244b308f5c7SGuenter Roeck };
245b308f5c7SGuenter Roeck
246002c6b54SGuenter Roeck #define HWMON_P_ENABLE BIT(hwmon_power_enable)
247b308f5c7SGuenter Roeck #define HWMON_P_AVERAGE BIT(hwmon_power_average)
248b308f5c7SGuenter Roeck #define HWMON_P_AVERAGE_INTERVAL BIT(hwmon_power_average_interval)
249b308f5c7SGuenter Roeck #define HWMON_P_AVERAGE_INTERVAL_MAX BIT(hwmon_power_average_interval_max)
250b308f5c7SGuenter Roeck #define HWMON_P_AVERAGE_INTERVAL_MIN BIT(hwmon_power_average_interval_min)
251b308f5c7SGuenter Roeck #define HWMON_P_AVERAGE_HIGHEST BIT(hwmon_power_average_highest)
252b308f5c7SGuenter Roeck #define HWMON_P_AVERAGE_LOWEST BIT(hwmon_power_average_lowest)
253b308f5c7SGuenter Roeck #define HWMON_P_AVERAGE_MAX BIT(hwmon_power_average_max)
254b308f5c7SGuenter Roeck #define HWMON_P_AVERAGE_MIN BIT(hwmon_power_average_min)
255b308f5c7SGuenter Roeck #define HWMON_P_INPUT BIT(hwmon_power_input)
256b308f5c7SGuenter Roeck #define HWMON_P_INPUT_HIGHEST BIT(hwmon_power_input_highest)
257b308f5c7SGuenter Roeck #define HWMON_P_INPUT_LOWEST BIT(hwmon_power_input_lowest)
258b308f5c7SGuenter Roeck #define HWMON_P_RESET_HISTORY BIT(hwmon_power_reset_history)
259b308f5c7SGuenter Roeck #define HWMON_P_ACCURACY BIT(hwmon_power_accuracy)
260b308f5c7SGuenter Roeck #define HWMON_P_CAP BIT(hwmon_power_cap)
261b308f5c7SGuenter Roeck #define HWMON_P_CAP_HYST BIT(hwmon_power_cap_hyst)
262b308f5c7SGuenter Roeck #define HWMON_P_CAP_MAX BIT(hwmon_power_cap_max)
263b308f5c7SGuenter Roeck #define HWMON_P_CAP_MIN BIT(hwmon_power_cap_min)
264aa7f29b0SAndrew Lunn #define HWMON_P_MIN BIT(hwmon_power_min)
265b308f5c7SGuenter Roeck #define HWMON_P_MAX BIT(hwmon_power_max)
266aa7f29b0SAndrew Lunn #define HWMON_P_LCRIT BIT(hwmon_power_lcrit)
267b308f5c7SGuenter Roeck #define HWMON_P_CRIT BIT(hwmon_power_crit)
268b308f5c7SGuenter Roeck #define HWMON_P_LABEL BIT(hwmon_power_label)
269b308f5c7SGuenter Roeck #define HWMON_P_ALARM BIT(hwmon_power_alarm)
270b308f5c7SGuenter Roeck #define HWMON_P_CAP_ALARM BIT(hwmon_power_cap_alarm)
27130945d31SNuno Sá #define HWMON_P_MIN_ALARM BIT(hwmon_power_min_alarm)
272b308f5c7SGuenter Roeck #define HWMON_P_MAX_ALARM BIT(hwmon_power_max_alarm)
273aa7f29b0SAndrew Lunn #define HWMON_P_LCRIT_ALARM BIT(hwmon_power_lcrit_alarm)
274b308f5c7SGuenter Roeck #define HWMON_P_CRIT_ALARM BIT(hwmon_power_crit_alarm)
2751967f712SZbigniew Lukwinski #define HWMON_P_RATED_MIN BIT(hwmon_power_rated_min)
2761967f712SZbigniew Lukwinski #define HWMON_P_RATED_MAX BIT(hwmon_power_rated_max)
277b308f5c7SGuenter Roeck
2786bfcca44SGuenter Roeck enum hwmon_energy_attributes {
279002c6b54SGuenter Roeck hwmon_energy_enable,
2806bfcca44SGuenter Roeck hwmon_energy_input,
2816bfcca44SGuenter Roeck hwmon_energy_label,
2826bfcca44SGuenter Roeck };
2836bfcca44SGuenter Roeck
284002c6b54SGuenter Roeck #define HWMON_E_ENABLE BIT(hwmon_energy_enable)
2856bfcca44SGuenter Roeck #define HWMON_E_INPUT BIT(hwmon_energy_input)
2866bfcca44SGuenter Roeck #define HWMON_E_LABEL BIT(hwmon_energy_label)
2876bfcca44SGuenter Roeck
2886bfcca44SGuenter Roeck enum hwmon_humidity_attributes {
289002c6b54SGuenter Roeck hwmon_humidity_enable,
2906bfcca44SGuenter Roeck hwmon_humidity_input,
2916bfcca44SGuenter Roeck hwmon_humidity_label,
2926bfcca44SGuenter Roeck hwmon_humidity_min,
2936bfcca44SGuenter Roeck hwmon_humidity_min_hyst,
2946bfcca44SGuenter Roeck hwmon_humidity_max,
2956bfcca44SGuenter Roeck hwmon_humidity_max_hyst,
2966bfcca44SGuenter Roeck hwmon_humidity_alarm,
2976bfcca44SGuenter Roeck hwmon_humidity_fault,
2981967f712SZbigniew Lukwinski hwmon_humidity_rated_min,
2991967f712SZbigniew Lukwinski hwmon_humidity_rated_max,
3005f85c4d1SJavier Carrasco hwmon_humidity_min_alarm,
3015f85c4d1SJavier Carrasco hwmon_humidity_max_alarm,
3026bfcca44SGuenter Roeck };
3036bfcca44SGuenter Roeck
304002c6b54SGuenter Roeck #define HWMON_H_ENABLE BIT(hwmon_humidity_enable)
3056bfcca44SGuenter Roeck #define HWMON_H_INPUT BIT(hwmon_humidity_input)
3066bfcca44SGuenter Roeck #define HWMON_H_LABEL BIT(hwmon_humidity_label)
3076bfcca44SGuenter Roeck #define HWMON_H_MIN BIT(hwmon_humidity_min)
3086bfcca44SGuenter Roeck #define HWMON_H_MIN_HYST BIT(hwmon_humidity_min_hyst)
3096bfcca44SGuenter Roeck #define HWMON_H_MAX BIT(hwmon_humidity_max)
3106bfcca44SGuenter Roeck #define HWMON_H_MAX_HYST BIT(hwmon_humidity_max_hyst)
3116bfcca44SGuenter Roeck #define HWMON_H_ALARM BIT(hwmon_humidity_alarm)
3126bfcca44SGuenter Roeck #define HWMON_H_FAULT BIT(hwmon_humidity_fault)
3131967f712SZbigniew Lukwinski #define HWMON_H_RATED_MIN BIT(hwmon_humidity_rated_min)
3141967f712SZbigniew Lukwinski #define HWMON_H_RATED_MAX BIT(hwmon_humidity_rated_max)
3155f85c4d1SJavier Carrasco #define HWMON_H_MIN_ALARM BIT(hwmon_humidity_min_alarm)
3165f85c4d1SJavier Carrasco #define HWMON_H_MAX_ALARM BIT(hwmon_humidity_max_alarm)
3176bfcca44SGuenter Roeck
3188faee73fSGuenter Roeck enum hwmon_fan_attributes {
319002c6b54SGuenter Roeck hwmon_fan_enable,
3208faee73fSGuenter Roeck hwmon_fan_input,
3218faee73fSGuenter Roeck hwmon_fan_label,
3228faee73fSGuenter Roeck hwmon_fan_min,
3238faee73fSGuenter Roeck hwmon_fan_max,
3248faee73fSGuenter Roeck hwmon_fan_div,
3258faee73fSGuenter Roeck hwmon_fan_pulses,
3268faee73fSGuenter Roeck hwmon_fan_target,
3278faee73fSGuenter Roeck hwmon_fan_alarm,
3288faee73fSGuenter Roeck hwmon_fan_min_alarm,
3298faee73fSGuenter Roeck hwmon_fan_max_alarm,
3308faee73fSGuenter Roeck hwmon_fan_fault,
331fe6ac237SJames Seo hwmon_fan_beep,
3328faee73fSGuenter Roeck };
3338faee73fSGuenter Roeck
334002c6b54SGuenter Roeck #define HWMON_F_ENABLE BIT(hwmon_fan_enable)
3358faee73fSGuenter Roeck #define HWMON_F_INPUT BIT(hwmon_fan_input)
3368faee73fSGuenter Roeck #define HWMON_F_LABEL BIT(hwmon_fan_label)
3378faee73fSGuenter Roeck #define HWMON_F_MIN BIT(hwmon_fan_min)
3388faee73fSGuenter Roeck #define HWMON_F_MAX BIT(hwmon_fan_max)
3398faee73fSGuenter Roeck #define HWMON_F_DIV BIT(hwmon_fan_div)
3408faee73fSGuenter Roeck #define HWMON_F_PULSES BIT(hwmon_fan_pulses)
3418faee73fSGuenter Roeck #define HWMON_F_TARGET BIT(hwmon_fan_target)
3428faee73fSGuenter Roeck #define HWMON_F_ALARM BIT(hwmon_fan_alarm)
3438faee73fSGuenter Roeck #define HWMON_F_MIN_ALARM BIT(hwmon_fan_min_alarm)
3448faee73fSGuenter Roeck #define HWMON_F_MAX_ALARM BIT(hwmon_fan_max_alarm)
3458faee73fSGuenter Roeck #define HWMON_F_FAULT BIT(hwmon_fan_fault)
346fe6ac237SJames Seo #define HWMON_F_BEEP BIT(hwmon_fan_beep)
3478faee73fSGuenter Roeck
348f9f7bb3aSGuenter Roeck enum hwmon_pwm_attributes {
349f9f7bb3aSGuenter Roeck hwmon_pwm_input,
350f9f7bb3aSGuenter Roeck hwmon_pwm_enable,
351f9f7bb3aSGuenter Roeck hwmon_pwm_mode,
352f9f7bb3aSGuenter Roeck hwmon_pwm_freq,
353e75d16e5SArmin Wolf hwmon_pwm_auto_channels_temp,
354f9f7bb3aSGuenter Roeck };
355f9f7bb3aSGuenter Roeck
356f9f7bb3aSGuenter Roeck #define HWMON_PWM_INPUT BIT(hwmon_pwm_input)
357f9f7bb3aSGuenter Roeck #define HWMON_PWM_ENABLE BIT(hwmon_pwm_enable)
358f9f7bb3aSGuenter Roeck #define HWMON_PWM_MODE BIT(hwmon_pwm_mode)
359f9f7bb3aSGuenter Roeck #define HWMON_PWM_FREQ BIT(hwmon_pwm_freq)
360e75d16e5SArmin Wolf #define HWMON_PWM_AUTO_CHANNELS_TEMP BIT(hwmon_pwm_auto_channels_temp)
361f9f7bb3aSGuenter Roeck
3624413405fSDr. David Alan Gilbert enum hwmon_intrusion_attributes {
3634413405fSDr. David Alan Gilbert hwmon_intrusion_alarm,
3644413405fSDr. David Alan Gilbert hwmon_intrusion_beep,
3654413405fSDr. David Alan Gilbert };
3664413405fSDr. David Alan Gilbert #define HWMON_INTRUSION_ALARM BIT(hwmon_intrusion_alarm)
3674413405fSDr. David Alan Gilbert #define HWMON_INTRUSION_BEEP BIT(hwmon_intrusion_beep)
3684413405fSDr. David Alan Gilbert
369d560168bSGuenter Roeck /**
370d560168bSGuenter Roeck * struct hwmon_ops - hwmon device operations
371*79bc0af9SHeiner Kallweit * @visible: Static visibility. If non-zero, 'is_visible' is ignored.
372*79bc0af9SHeiner Kallweit * @is_visible: Callback to return attribute visibility. Mandatory unless
373*79bc0af9SHeiner Kallweit * 'visible' is non-zero.
374d560168bSGuenter Roeck * Parameters are:
375d560168bSGuenter Roeck * @const void *drvdata:
376d560168bSGuenter Roeck * Pointer to driver-private data structure passed
377d560168bSGuenter Roeck * as argument to hwmon_device_register_with_info().
378d560168bSGuenter Roeck * @type: Sensor type
379d560168bSGuenter Roeck * @attr: Sensor attribute
380d560168bSGuenter Roeck * @channel:
381d560168bSGuenter Roeck * Channel number
382d560168bSGuenter Roeck * The function returns the file permissions.
383d560168bSGuenter Roeck * If the return value is 0, no attribute will be created.
384e159ab5cSGuenter Roeck * @read: Read callback for data attributes. Mandatory if readable
385e159ab5cSGuenter Roeck * data attributes are present.
386d560168bSGuenter Roeck * Parameters are:
387d560168bSGuenter Roeck * @dev: Pointer to hardware monitoring device
388d560168bSGuenter Roeck * @type: Sensor type
389d560168bSGuenter Roeck * @attr: Sensor attribute
390d560168bSGuenter Roeck * @channel:
391d560168bSGuenter Roeck * Channel number
392d560168bSGuenter Roeck * @val: Pointer to returned value
393d560168bSGuenter Roeck * The function returns 0 on success or a negative error number.
394e159ab5cSGuenter Roeck * @read_string:
395e159ab5cSGuenter Roeck * Read callback for string attributes. Mandatory if string
396e159ab5cSGuenter Roeck * attributes are present.
397e159ab5cSGuenter Roeck * Parameters are:
398e159ab5cSGuenter Roeck * @dev: Pointer to hardware monitoring device
399e159ab5cSGuenter Roeck * @type: Sensor type
400e159ab5cSGuenter Roeck * @attr: Sensor attribute
401e159ab5cSGuenter Roeck * @channel:
402e159ab5cSGuenter Roeck * Channel number
403e159ab5cSGuenter Roeck * @str: Pointer to returned string
404e159ab5cSGuenter Roeck * The function returns 0 on success or a negative error number.
405e159ab5cSGuenter Roeck * @write: Write callback for data attributes. Mandatory if writeable
406e159ab5cSGuenter Roeck * data attributes are present.
407d560168bSGuenter Roeck * Parameters are:
408d560168bSGuenter Roeck * @dev: Pointer to hardware monitoring device
409d560168bSGuenter Roeck * @type: Sensor type
410d560168bSGuenter Roeck * @attr: Sensor attribute
411d560168bSGuenter Roeck * @channel:
412d560168bSGuenter Roeck * Channel number
413d560168bSGuenter Roeck * @val: Value to write
414d560168bSGuenter Roeck * The function returns 0 on success or a negative error number.
415d560168bSGuenter Roeck */
416d560168bSGuenter Roeck struct hwmon_ops {
417*79bc0af9SHeiner Kallweit umode_t visible;
418d560168bSGuenter Roeck umode_t (*is_visible)(const void *drvdata, enum hwmon_sensor_types type,
419d560168bSGuenter Roeck u32 attr, int channel);
420d560168bSGuenter Roeck int (*read)(struct device *dev, enum hwmon_sensor_types type,
421d560168bSGuenter Roeck u32 attr, int channel, long *val);
422e159ab5cSGuenter Roeck int (*read_string)(struct device *dev, enum hwmon_sensor_types type,
4235ba6bcbcSJean Delvare u32 attr, int channel, const char **str);
424d560168bSGuenter Roeck int (*write)(struct device *dev, enum hwmon_sensor_types type,
425d560168bSGuenter Roeck u32 attr, int channel, long val);
426d560168bSGuenter Roeck };
427d560168bSGuenter Roeck
428d560168bSGuenter Roeck /**
429130d1688SLukas Bulwahn * struct hwmon_channel_info - Channel information
430d560168bSGuenter Roeck * @type: Channel type.
431d560168bSGuenter Roeck * @config: Pointer to NULL-terminated list of channel parameters.
432d560168bSGuenter Roeck * Use for per-channel attributes.
433d560168bSGuenter Roeck */
434d560168bSGuenter Roeck struct hwmon_channel_info {
435d560168bSGuenter Roeck enum hwmon_sensor_types type;
436d560168bSGuenter Roeck const u32 *config;
437d560168bSGuenter Roeck };
438d560168bSGuenter Roeck
439c43a113cSCharles Keepax #define HWMON_CHANNEL_INFO(stype, ...) \
440b9f55084SJani Nikula (&(const struct hwmon_channel_info) { \
441c43a113cSCharles Keepax .type = hwmon_##stype, \
442b9f55084SJani Nikula .config = (const u32 []) { \
443c43a113cSCharles Keepax __VA_ARGS__, 0 \
444c43a113cSCharles Keepax } \
445c43a113cSCharles Keepax })
446c43a113cSCharles Keepax
447d560168bSGuenter Roeck /**
448130d1688SLukas Bulwahn * struct hwmon_chip_info - Chip configuration
449d560168bSGuenter Roeck * @ops: Pointer to hwmon operations.
450d560168bSGuenter Roeck * @info: Null-terminated list of channel information.
451d560168bSGuenter Roeck */
452d560168bSGuenter Roeck struct hwmon_chip_info {
453d560168bSGuenter Roeck const struct hwmon_ops *ops;
454d8cc9415SKrzysztof Kozlowski const struct hwmon_channel_info * const *info;
455d560168bSGuenter Roeck };
456d560168bSGuenter Roeck
457af1bd36cSGuenter Roeck /* hwmon_device_register() is deprecated */
4581beeffe4STony Jones struct device *hwmon_device_register(struct device *dev);
459af1bd36cSGuenter Roeck
4605720a18bSGuenter Roeck /*
4615720a18bSGuenter Roeck * hwmon_device_register_with_groups() and
4625720a18bSGuenter Roeck * devm_hwmon_device_register_with_groups() are deprecated.
4635720a18bSGuenter Roeck */
464bab2243cSGuenter Roeck struct device *
465bab2243cSGuenter Roeck hwmon_device_register_with_groups(struct device *dev, const char *name,
466bab2243cSGuenter Roeck void *drvdata,
467bab2243cSGuenter Roeck const struct attribute_group **groups);
46874188cbaSGuenter Roeck struct device *
46974188cbaSGuenter Roeck devm_hwmon_device_register_with_groups(struct device *dev, const char *name,
47074188cbaSGuenter Roeck void *drvdata,
47174188cbaSGuenter Roeck const struct attribute_group **groups);
472d560168bSGuenter Roeck struct device *
473d560168bSGuenter Roeck hwmon_device_register_with_info(struct device *dev,
474d560168bSGuenter Roeck const char *name, void *drvdata,
475d560168bSGuenter Roeck const struct hwmon_chip_info *info,
476848ba0a2SGuenter Roeck const struct attribute_group **extra_groups);
477d560168bSGuenter Roeck struct device *
478e5d21072SGuenter Roeck hwmon_device_register_for_thermal(struct device *dev, const char *name,
479e5d21072SGuenter Roeck void *drvdata);
480e5d21072SGuenter Roeck struct device *
481d560168bSGuenter Roeck devm_hwmon_device_register_with_info(struct device *dev,
482d560168bSGuenter Roeck const char *name, void *drvdata,
483d560168bSGuenter Roeck const struct hwmon_chip_info *info,
484848ba0a2SGuenter Roeck const struct attribute_group **extra_groups);
4851236441fSMark M. Hoffman
4861beeffe4STony Jones void hwmon_device_unregister(struct device *dev);
4871236441fSMark M. Hoffman
4881597b374SGuenter Roeck int hwmon_notify_event(struct device *dev, enum hwmon_sensor_types type,
4891597b374SGuenter Roeck u32 attr, int channel);
4901597b374SGuenter Roeck
4911ad6c3b7SMichael Walle char *hwmon_sanitize_name(const char *name);
4921ad6c3b7SMichael Walle char *devm_hwmon_sanitize_name(struct device *dev, const char *name);
4931ad6c3b7SMichael Walle
494dcb5d0fcSAndrew Lunn /**
495dcb5d0fcSAndrew Lunn * hwmon_is_bad_char - Is the char invalid in a hwmon name
496dcb5d0fcSAndrew Lunn * @ch: the char to be considered
497dcb5d0fcSAndrew Lunn *
498dcb5d0fcSAndrew Lunn * hwmon_is_bad_char() can be used to determine if the given character
499dcb5d0fcSAndrew Lunn * may not be used in a hwmon name.
500dcb5d0fcSAndrew Lunn *
501dcb5d0fcSAndrew Lunn * Returns true if the char is invalid, false otherwise.
502dcb5d0fcSAndrew Lunn */
hwmon_is_bad_char(const char ch)503dcb5d0fcSAndrew Lunn static inline bool hwmon_is_bad_char(const char ch)
504dcb5d0fcSAndrew Lunn {
505dcb5d0fcSAndrew Lunn switch (ch) {
506dcb5d0fcSAndrew Lunn case '-':
507dcb5d0fcSAndrew Lunn case '*':
508dcb5d0fcSAndrew Lunn case ' ':
509dcb5d0fcSAndrew Lunn case '\t':
510dcb5d0fcSAndrew Lunn case '\n':
511dcb5d0fcSAndrew Lunn return true;
512dcb5d0fcSAndrew Lunn default:
513dcb5d0fcSAndrew Lunn return false;
514dcb5d0fcSAndrew Lunn }
515dcb5d0fcSAndrew Lunn }
516dcb5d0fcSAndrew Lunn
5171236441fSMark M. Hoffman #endif
518