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