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