/* * This file is part of the coreboot project. * * Copyright 2017 secunet Security Networks AG * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef DRIVERS_I2C_NCT7802Y_CHIP_H #define DRIVERS_I2C_NCT7802Y_CHIP_H #include #define NCT7802Y_PECI_CNT 2 #define NCT7802Y_FAN_CNT 3 enum nct7802y_peci_mode { PECI_DISABLED = 0, PECI_DOMAIN_0, PECI_DOMAIN_1, PECI_HIGHEST, }; struct nct7802y_peci_config { enum nct7802y_peci_mode mode; u8 base_temp; }; enum nct7802y_fan_mode { FAN_IGNORE = 0, FAN_MANUAL, FAN_SMART, }; enum nct7802y_fan_smartmode { SMART_FAN_DUTY = 0, /* Target values given in duty cycle %. */ SMART_FAN_RPM, /* Target valuse given in RPM. */ }; enum nct7802y_fan_speed { FAN_SPEED_NORMAL = 0, /* RPM values <= 12,750. */ FAN_SPPED_HIGHSPEED, /* RPM values <= 25,500. */ }; enum nct7802y_fan_pecierror { PECI_ERROR_KEEP = 0, /* Keep current value. */ PECI_ERROR_VALUE, /* Use `pecierror_minduty`. */ PECI_ERROR_FULLSPEED, /* Run PWM at 100% duty cycle. */ }; enum nct7802y_temp_source { TEMP_SOURCE_REMOTE_1 = 0, TEMP_SOURCE_REMOTE_2, TEMP_SOURCE_REMOTE_3, TEMP_SOURCE_LOCAL, TEMP_SOURCE_PECI_0, TEMP_SOURCE_PECI_1, TEMP_SOURCE_PROGRAMMABLE_0, TEMP_SOURCE_PROGRAMMABLE_1, }; struct nct7802y_fan_smartconfig { enum nct7802y_fan_smartmode mode; enum nct7802y_fan_speed speed; enum nct7802y_temp_source tempsrc; struct { u8 temp; u16 target; } table[4]; u8 critical_temp; }; struct nct7802y_fan_config { enum nct7802y_fan_mode mode; union { u8 duty_cycle; struct nct7802y_fan_smartconfig smart; }; }; /* Implements only those parts currently used by coreboot mainboards. */ struct drivers_i2c_nct7802y_config { struct nct7802y_peci_config peci[NCT7802Y_PECI_CNT]; struct nct7802y_fan_config fan[NCT7802Y_FAN_CNT]; enum nct7802y_fan_pecierror on_pecierror; u8 pecierror_minduty; }; #endif /* DRIVERS_I2C_NCT7802Y_CHIP_H */