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 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