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
11typedef int (*get_temp_fun)(int);
12extern int loongson3_cpu_temp(int);
13
14/* 0:Max speed, 1:Manual, 2:Auto */
15enum fan_control_mode {
16	FAN_FULL_MODE = 0,
17	FAN_MANUAL_MODE = 1,
18	FAN_AUTO_MODE = 2,
19	FAN_MODE_END
20};
21
22struct 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 */
36struct 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 temperature 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