1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __LOONGSON_HWMON_H_
3 #define __LOONGSON_HWMON_H_
4 
5 #include <linux/types.h>
6 
7 #define MIN_TEMP	0
8 #define MAX_TEMP	255
9 #define NOT_VALID_TEMP	999
10 
11 typedef int (*get_temp_fun)(int);
12 extern int loongson3_cpu_temp(int);
13 
14 /* 0:Max speed, 1:Manual, 2:Auto */
15 enum fan_control_mode {
16 	FAN_FULL_MODE = 0,
17 	FAN_MANUAL_MODE = 1,
18 	FAN_AUTO_MODE = 2,
19 	FAN_MODE_END
20 };
21 
22 struct temp_range {
23 	u8 low;
24 	u8 high;
25 	u8 level;
26 };
27 
28 #define CONSTANT_SPEED_POLICY	0  /* at constant speed */
29 #define STEP_SPEED_POLICY	1  /* use up/down arrays to describe policy */
30 #define KERNEL_HELPER_POLICY	2  /* kernel as a helper to fan control */
31 
32 #define MAX_STEP_NUM	16
33 #define MAX_FAN_LEVEL	255
34 
35 /* loongson_fan_policy works when fan work at FAN_AUTO_MODE */
36 struct loongson_fan_policy {
37 	u8	type;
38 
39 	/* percent only used when type is CONSTANT_SPEED_POLICY */
40 	u8	percent;
41 
42 	/* period between two check. (Unit: S) */
43 	u8	adjust_period;
44 
45 	/* fan adjust usually depend on a temprature input */
46 	get_temp_fun	depend_temp;
47 
48 	/* up_step/down_step used when type is STEP_SPEED_POLICY */
49 	u8	up_step_num;
50 	u8	down_step_num;
51 	struct temp_range up_step[MAX_STEP_NUM];
52 	struct temp_range down_step[MAX_STEP_NUM];
53 	struct delayed_work work;
54 };
55 
56 #endif /* __LOONGSON_HWMON_H_*/
57