1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 3 #ifndef DRIVERS_I2C_NCT7802Y_CHIP_H 4 #define DRIVERS_I2C_NCT7802Y_CHIP_H 5 6 #include <stdint.h> 7 8 #define NCT7802Y_PECI_CNT 2 9 #define NCT7802Y_FAN_CNT 3 10 #define NCT7802Y_RTD_CNT 3 11 12 /* Remote temperature diode sensors mode */ 13 enum nct7802y_rtd_mode { 14 RTD_CLOSED = 0, 15 RTD_CURRENT_MODE, 16 RTD_THERMISTOR_MODE, 17 RTD_VOLTAGE_MODE, 18 }; 19 20 enum nct7802y_peci_mode { 21 PECI_DISABLED = 0, 22 PECI_DOMAIN_0, 23 PECI_DOMAIN_1, 24 PECI_HIGHEST, 25 }; 26 27 struct nct7802y_peci_config { 28 enum nct7802y_peci_mode mode; 29 u8 base_temp; 30 }; 31 32 enum nct7802y_fan_mode { 33 FAN_IGNORE = 0, 34 FAN_MANUAL, 35 FAN_SMART, 36 }; 37 38 enum nct7802y_fan_smartmode { 39 SMART_FAN_DUTY = 0, /* Target values given in duty cycle %. */ 40 SMART_FAN_RPM, /* Target values given in RPM. */ 41 }; 42 43 enum nct7802y_fan_speed { 44 FAN_SPEED_NORMAL = 0, /* RPM values <= 12,750. */ 45 FAN_SPPED_HIGHSPEED, /* RPM values <= 25,500. */ 46 }; 47 48 enum nct7802y_fan_pecierror { 49 PECI_ERROR_KEEP = 0, /* Keep current value. */ 50 PECI_ERROR_VALUE, /* Use `pecierror_minduty`. */ 51 PECI_ERROR_FULLSPEED, /* Run PWM at 100% duty cycle. */ 52 }; 53 54 enum nct7802y_temp_source { 55 TEMP_SOURCE_REMOTE_1 = 0, 56 TEMP_SOURCE_REMOTE_2, 57 TEMP_SOURCE_REMOTE_3, 58 TEMP_SOURCE_LOCAL, 59 TEMP_SOURCE_PECI_0, 60 TEMP_SOURCE_PECI_1, 61 TEMP_SOURCE_PROGRAMMABLE_0, 62 TEMP_SOURCE_PROGRAMMABLE_1, 63 }; 64 65 struct nct7802y_sensors_config { 66 bool local_enable; 67 enum nct7802y_rtd_mode rtd[NCT7802Y_RTD_CNT]; 68 }; 69 70 struct nct7802y_fan_smartconfig { 71 enum nct7802y_fan_smartmode mode; 72 enum nct7802y_fan_speed speed; 73 enum nct7802y_temp_source tempsrc; 74 struct { 75 u8 temp; 76 u16 target; 77 } table[4]; 78 u8 critical_temp; 79 }; 80 81 struct nct7802y_fan_config { 82 enum nct7802y_fan_mode mode; 83 union { 84 u8 duty_cycle; 85 struct nct7802y_fan_smartconfig smart; 86 }; 87 }; 88 89 /* Implements only those parts currently used by coreboot mainboards. */ 90 struct drivers_i2c_nct7802y_config { 91 struct nct7802y_peci_config peci[NCT7802Y_PECI_CNT]; 92 struct nct7802y_fan_config fan[NCT7802Y_FAN_CNT]; 93 struct nct7802y_sensors_config sensors; 94 enum nct7802y_fan_pecierror on_pecierror; 95 u8 pecierror_minduty; 96 }; 97 98 #endif /* DRIVERS_I2C_NCT7802Y_CHIP_H */ 99