summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/superio/ite/common/env_ctrl.c6
-rw-r--r--src/superio/ite/common/env_ctrl.h1
-rw-r--r--src/superio/ite/common/env_ctrl_chip.h19
3 files changed, 16 insertions, 10 deletions
diff --git a/src/superio/ite/common/env_ctrl.c b/src/superio/ite/common/env_ctrl.c
index f63bfd3eea..fbf74468b0 100644
--- a/src/superio/ite/common/env_ctrl.c
+++ b/src/superio/ite/common/env_ctrl.c
@@ -113,6 +113,7 @@ static void fan_smartconfig(const u16 base, const u8 fan,
u8 pwm_ctrl;
u8 pwm_start = 0;
u8 pwm_auto = 0;
+ u8 delta_temp;
if (mode == FAN_SMART_SOFTWARE) {
pwm_ctrl = ITE_EC_FAN_CTL_PWM_MODE_SOFTWARE;
@@ -145,8 +146,11 @@ static void fan_smartconfig(const u16 base, const u8 fan,
/* Full speed above 127°C by default */
pnp_write_hwm5_index(base, ITE_EC_FAN_CTL_TEMP_LIMIT_FULL(fan),
conf->tmp_full ? conf->tmp_full : 127);
+
+ delta_temp = ITE_EC_FAN_CTL_DELTA_TEMP_INTRVL(conf->tmp_delta);
+ delta_temp |= ITE_EC_FAN_CTL_FULL_AT_THRML_LMT(conf->full_lmt);
pnp_write_hwm5_index(base, ITE_EC_FAN_CTL_DELTA_TEMP(fan),
- ITE_EC_FAN_CTL_DELTA_TEMP_INTRVL(conf->tmp_delta));
+ delta_temp);
}
pnp_write_hwm5_index(base, ITE_EC_FAN_CTL_PWM_CONTROL(fan), pwm_ctrl);
diff --git a/src/superio/ite/common/env_ctrl.h b/src/superio/ite/common/env_ctrl.h
index e8fb1f5b01..7bce8097f5 100644
--- a/src/superio/ite/common/env_ctrl.h
+++ b/src/superio/ite/common/env_ctrl.h
@@ -185,6 +185,7 @@ static const u8 ITE_EC_TEMP_ADJUST[] = { 0x56, 0x57, 0x59 };
/* Common for ITE_EC_FAN_CTL_DELTA_TEMP */
#define ITE_EC_FAN_CTL_DELTA_TEMP_INTRVL(c) ((c) & 0x1f)
+#define ITE_EC_FAN_CTL_FULL_AT_THRML_LMT(x) (((x) & 0x1) << 6)
#define ITE_EC_FAN_CTL_TARGET_ZONE(x) (0x66 + ((x)-1) * 8)
#define ITE_EC_FAN_CTL_TARGET_ZONE_MASK 0x0f
diff --git a/src/superio/ite/common/env_ctrl_chip.h b/src/superio/ite/common/env_ctrl_chip.h
index 6a027b90f1..09577a4d84 100644
--- a/src/superio/ite/common/env_ctrl_chip.h
+++ b/src/superio/ite/common/env_ctrl_chip.h
@@ -50,15 +50,16 @@ enum ite_ec_fan_mode {
};
struct ite_ec_fan_smartconfig {
- u8 tmpin; /* select TMPINx (1, 2 or 3) */
- u8 tmp_off; /* turn fan off below (°C) */
- u8 tmp_start; /* turn fan on above (°C) */
- u8 tmp_full; /* 100% duty cycle above (°C) */
- u8 tmp_delta; /* adapt fan speed when temperature
- changed by at least `tmp_delta`°C */
- u8 smoothing; /* enable smoothing */
- u8 pwm_start; /* start at this duty cycle (%) */
- u8 slope; /* increase duty cycle by `slope`%/°C */
+ u8 tmpin; /* select TMPINx (1, 2 or 3) */
+ u8 tmp_off; /* turn fan off below (°C) */
+ u8 tmp_start; /* turn fan on above (°C) */
+ u8 tmp_full; /* 100% duty cycle above (°C) */
+ u8 tmp_delta; /* adapt fan speed when temperature changed by
+ at least `tmp_delta`°C */
+ u8 full_lmt; /* force fan to full PWM at thermal limit */
+ u8 smoothing; /* enable smoothing */
+ u8 pwm_start; /* start at this duty cycle (%) */
+ u8 slope; /* increase duty cycle by `slope`%/°C */
};
struct ite_ec_fan_config {