aboutsummaryrefslogtreecommitdiff
path: root/src/superio/ite/common/env_ctrl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/superio/ite/common/env_ctrl.c')
-rw-r--r--src/superio/ite/common/env_ctrl.c38
1 files changed, 27 insertions, 11 deletions
diff --git a/src/superio/ite/common/env_ctrl.c b/src/superio/ite/common/env_ctrl.c
index 92c9bcab3d..f69273e984 100644
--- a/src/superio/ite/common/env_ctrl.c
+++ b/src/superio/ite/common/env_ctrl.c
@@ -3,6 +3,7 @@
*
* Copyright (C) 2011 The ChromiumOS Authors. All rights reserved.
* Copyright (C) 2016 secunet Security Networks AG
+ * Copyright (C) 2019 Protectli
*
* 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
@@ -191,7 +192,9 @@ static void enable_fan(const u16 base, const u8 fan,
{
u8 reg;
- if (conf->mode == FAN_IGNORE)
+ if (conf->mode == FAN_IGNORE ||
+ (IS_ENABLED(CONFIG_SUPERIO_ITE_ENV_CTRL_NO_ONOFF) &&
+ conf->mode <= FAN_MODE_OFF))
return;
/* FAN_CTL2 might have its own frequency setting */
@@ -220,16 +223,29 @@ static void enable_fan(const u16 base, const u8 fan,
ite_ec_write(base, ITE_EC_FAN_TAC_COUNTER_ENABLE, reg);
}
- reg = ite_ec_read(base, ITE_EC_FAN_MAIN_CTL);
- if (conf->mode >= FAN_MODE_ON)
- reg |= ITE_EC_FAN_MAIN_CTL_TAC_EN(fan);
- else
- reg &= ~ITE_EC_FAN_MAIN_CTL_TAC_EN(fan);
- if (conf->mode >= FAN_SMART_SOFTWARE)
- reg |= ITE_EC_FAN_MAIN_CTL_SMART(fan);
- else
- reg &= ~ITE_EC_FAN_MAIN_CTL_SMART(fan);
- ite_ec_write(base, ITE_EC_FAN_MAIN_CTL, reg);
+ if (IS_ENABLED(CONFIG_SUPERIO_ITE_ENV_CTRL_5FANS) && fan > 3) {
+ reg = ite_ec_read(base, ITE_EC_FAN_SEC_CTL);
+ if (conf->mode >= FAN_MODE_ON)
+ reg |= ITE_EC_FAN_SEC_CTL_TAC_EN(fan);
+ else
+ reg &= ~ITE_EC_FAN_SEC_CTL_TAC_EN(fan);
+ ite_ec_write(base, ITE_EC_FAN_SEC_CTL, reg);
+ } else {
+ reg = ite_ec_read(base, ITE_EC_FAN_MAIN_CTL);
+ if (conf->mode >= FAN_MODE_ON)
+ reg |= ITE_EC_FAN_MAIN_CTL_TAC_EN(fan);
+ else
+ reg &= ~ITE_EC_FAN_MAIN_CTL_TAC_EN(fan);
+
+ /* Some ITEs have SmartGuardian always enabled */
+ if (!IS_ENABLED(CONFIG_SUPERIO_ITE_ENV_CTRL_NO_ONOFF)) {
+ if (conf->mode >= FAN_SMART_SOFTWARE)
+ reg |= ITE_EC_FAN_MAIN_CTL_SMART(fan);
+ else
+ reg &= ~ITE_EC_FAN_MAIN_CTL_SMART(fan);
+ }
+ ite_ec_write(base, ITE_EC_FAN_MAIN_CTL, reg);
+ }
}
static void enable_beeps(const u16 base, const struct ite_ec_config *const conf)