1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 230ad29bbSHuacai Chen #ifndef __LOONGSON_HWMON_H_ 330ad29bbSHuacai Chen #define __LOONGSON_HWMON_H_ 430ad29bbSHuacai Chen 530ad29bbSHuacai Chen #include <linux/types.h> 630ad29bbSHuacai Chen 730ad29bbSHuacai Chen #define MIN_TEMP 0 830ad29bbSHuacai Chen #define MAX_TEMP 255 930ad29bbSHuacai Chen #define NOT_VALID_TEMP 999 1030ad29bbSHuacai Chen 1130ad29bbSHuacai Chen typedef int (*get_temp_fun)(int); 1230ad29bbSHuacai Chen extern int loongson3_cpu_temp(int); 1330ad29bbSHuacai Chen 1430ad29bbSHuacai Chen /* 0:Max speed, 1:Manual, 2:Auto */ 1530ad29bbSHuacai Chen enum fan_control_mode { 1630ad29bbSHuacai Chen FAN_FULL_MODE = 0, 1730ad29bbSHuacai Chen FAN_MANUAL_MODE = 1, 1830ad29bbSHuacai Chen FAN_AUTO_MODE = 2, 1930ad29bbSHuacai Chen FAN_MODE_END 2030ad29bbSHuacai Chen }; 2130ad29bbSHuacai Chen 2230ad29bbSHuacai Chen struct temp_range { 2330ad29bbSHuacai Chen u8 low; 2430ad29bbSHuacai Chen u8 high; 2530ad29bbSHuacai Chen u8 level; 2630ad29bbSHuacai Chen }; 2730ad29bbSHuacai Chen 28fb0f6e8aSAndrea Gelmini #define CONSTANT_SPEED_POLICY 0 /* at constant speed */ 2930ad29bbSHuacai Chen #define STEP_SPEED_POLICY 1 /* use up/down arrays to describe policy */ 3030ad29bbSHuacai Chen #define KERNEL_HELPER_POLICY 2 /* kernel as a helper to fan control */ 3130ad29bbSHuacai Chen 3230ad29bbSHuacai Chen #define MAX_STEP_NUM 16 3330ad29bbSHuacai Chen #define MAX_FAN_LEVEL 255 3430ad29bbSHuacai Chen 3530ad29bbSHuacai Chen /* loongson_fan_policy works when fan work at FAN_AUTO_MODE */ 3630ad29bbSHuacai Chen struct loongson_fan_policy { 3730ad29bbSHuacai Chen u8 type; 3830ad29bbSHuacai Chen 3930ad29bbSHuacai Chen /* percent only used when type is CONSTANT_SPEED_POLICY */ 4030ad29bbSHuacai Chen u8 percent; 4130ad29bbSHuacai Chen 4230ad29bbSHuacai Chen /* period between two check. (Unit: S) */ 4330ad29bbSHuacai Chen u8 adjust_period; 4430ad29bbSHuacai Chen 4530ad29bbSHuacai Chen /* fan adjust usually depend on a temprature input */ 4630ad29bbSHuacai Chen get_temp_fun depend_temp; 4730ad29bbSHuacai Chen 4830ad29bbSHuacai Chen /* up_step/down_step used when type is STEP_SPEED_POLICY */ 4930ad29bbSHuacai Chen u8 up_step_num; 5030ad29bbSHuacai Chen u8 down_step_num; 5130ad29bbSHuacai Chen struct temp_range up_step[MAX_STEP_NUM]; 5230ad29bbSHuacai Chen struct temp_range down_step[MAX_STEP_NUM]; 5330ad29bbSHuacai Chen struct delayed_work work; 5430ad29bbSHuacai Chen }; 5530ad29bbSHuacai Chen 5630ad29bbSHuacai Chen #endif /* __LOONGSON_HWMON_H_*/ 57