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