superio/ite/common: Add support for closed-loop mode
Add support for tachometer closed loop mode, and programming of initial RPM vs initial PWM value. Change-Id: Idff29331c979f8518021103b6f8d19e75e657e3a Signed-off-by: Matt DeVillier <matt.devillier@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/44418 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Felix Held <felix-coreboot@felixheld.de>
This commit is contained in:
parent
deb80ea807
commit
67f80fb8f5
|
@ -128,13 +128,19 @@ static void fan_smartconfig(const u16 base, const u8 fan,
|
|||
pwm_ctrl = ITE_EC_FAN_CTL_PWM_MODE_AUTOMATIC;
|
||||
pwm_ctrl |= ITE_EC_FAN_CTL_TEMPIN(conf->tmpin);
|
||||
|
||||
pwm_start = ITE_EC_FAN_CTL_PWM_START_DUTY(conf->pwm_start);
|
||||
|
||||
if (CONFIG(SUPERIO_ITE_ENV_CTRL_7BIT_SLOPE_REG)) {
|
||||
pwm_auto = conf->slope & 0x7f;
|
||||
} else {
|
||||
pwm_start |= ITE_EC_FAN_CTL_PWM_SLOPE_BIT6(conf->slope);
|
||||
if (conf->clsd_loop) {
|
||||
pwm_ctrl |= ITE_EC_FAN_PWM_CLSD_LOOP;
|
||||
pwm_start = ITE_EC_FAN_CTL_PWM_START_RPM(conf->rpm_start);
|
||||
pwm_auto = ITE_EC_FAN_CTL_PWM_SLOPE_LOWER(conf->slope);
|
||||
} else {
|
||||
pwm_start = ITE_EC_FAN_CTL_PWM_START_DUTY(conf->pwm_start);
|
||||
|
||||
if (CONFIG(SUPERIO_ITE_ENV_CTRL_7BIT_SLOPE_REG)) {
|
||||
pwm_auto = conf->slope & 0x7f;
|
||||
} else {
|
||||
pwm_start |= ITE_EC_FAN_CTL_PWM_SLOPE_BIT6(conf->slope);
|
||||
pwm_auto = ITE_EC_FAN_CTL_PWM_SLOPE_LOWER(conf->slope);
|
||||
}
|
||||
}
|
||||
|
||||
if (conf->smoothing)
|
||||
|
|
|
@ -91,6 +91,7 @@
|
|||
? (0x1e + ((x)-4)) \
|
||||
: (0x15 + ((x)-1)) \
|
||||
)
|
||||
#define ITE_EC_FAN_PWM_CLSD_LOOP (1 << 2)
|
||||
|
||||
#if CONFIG(SUPERIO_ITE_ENV_CTRL_5FANS)
|
||||
#define ITE_EC_FAN_CTL_TEMPIN_MASK (7 << 3)
|
||||
|
@ -110,6 +111,13 @@
|
|||
? ITE_EC_FAN_MAX_PWM \
|
||||
: (_p * ITE_EC_FAN_MAX_PWM) / 100; \
|
||||
})
|
||||
#define ITE_EC_FAN_CTL_PWM_RPM(p) \
|
||||
({ \
|
||||
const unsigned int _p = p; \
|
||||
(_p >= 4080) \
|
||||
? 0xFF \
|
||||
: (_p / 16); \
|
||||
})
|
||||
|
||||
#define ITE_EC_HIGH_TEMP_LIMIT(x) (0x40 + ((x-1) * 2))
|
||||
#define ITE_EC_LOW_TEMP_LIMIT(x) (0x41 + ((x-1) * 2))
|
||||
|
@ -178,6 +186,7 @@ static const u8 ITE_EC_TEMP_ADJUST[] = { 0x56, 0x57, 0x59 };
|
|||
/* Common for ITE_EC_FAN_CTL_PWM_START */
|
||||
#define ITE_EC_FAN_CTL_PWM_SLOPE_BIT6(s) (((s) & 0x40) << 1)
|
||||
#define ITE_EC_FAN_CTL_PWM_START_DUTY(p) ITE_EC_FAN_CTL_PWM_DUTY(p)
|
||||
#define ITE_EC_FAN_CTL_PWM_START_RPM(p) ITE_EC_FAN_CTL_PWM_RPM(p)
|
||||
|
||||
/* Common for ITE_EC_FAN_CTL_PWM_AUTO */
|
||||
#define ITE_EC_FAN_CTL_AUTO_SMOOTHING_EN (1 << 7)
|
||||
|
|
|
@ -60,6 +60,8 @@ struct ite_ec_fan_smartconfig {
|
|||
u8 smoothing; /* enable smoothing */
|
||||
u8 pwm_start; /* start at this duty cycle (%) */
|
||||
u8 slope; /* increase duty cycle by `slope`%/°C */
|
||||
u8 clsd_loop; /* tachometer closed-loop mode enable */
|
||||
u16 rpm_start; /* start at this RPM (clsd_loop = 1) */
|
||||
};
|
||||
|
||||
struct ite_ec_fan_config {
|
||||
|
|
Loading…
Reference in New Issue