Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / arch / mips / include / asm / mach-loongson64 / loongson_hwmon.h
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_*/