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