summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/superio/ite/common/env_ctrl.c27
-rw-r--r--src/superio/ite/common/env_ctrl.h6
-rw-r--r--src/superio/ite/common/env_ctrl_chip.h4
3 files changed, 34 insertions, 3 deletions
diff --git a/src/superio/ite/common/env_ctrl.c b/src/superio/ite/common/env_ctrl.c
index 44926bc3ec..1dc5bb68f5 100644
--- a/src/superio/ite/common/env_ctrl.c
+++ b/src/superio/ite/common/env_ctrl.c
@@ -232,6 +232,30 @@ static void enable_fan(const u16 base, const u8 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)
+{
+ u8 reg = 0;
+ u8 freq = ITE_EC_BEEP_TONE_DIVISOR(10) | ITE_EC_BEEP_FREQ_DIVISOR(10);
+
+ if (conf->tmpin_beep) {
+ reg |= ITE_EC_BEEP_ON_TMP_LIMIT;
+ ite_ec_write(base, ITE_EC_BEEP_FREQ_DIV_OF_TMPIN, freq);
+ }
+ if (conf->fan_beep) {
+ reg |= ITE_EC_BEEP_ON_FAN_LIMIT;
+ ite_ec_write(base, ITE_EC_BEEP_FREQ_DIV_OF_FAN, freq);
+ }
+ if (conf->vin_beep) {
+ reg |= ITE_EC_BEEP_ON_VIN_LIMIT;
+ ite_ec_write(base, ITE_EC_BEEP_FREQ_DIV_OF_VIN, freq);
+ }
+
+ if (reg) {
+ reg |= ite_ec_read(base, ITE_EC_BEEP_ENABLE);
+ ite_ec_write(base, ITE_EC_BEEP_ENABLE, reg);
+ }
+}
+
void ite_ec_init(const u16 base, const struct ite_ec_config *const conf)
{
size_t i;
@@ -254,6 +278,9 @@ void ite_ec_init(const u16 base, const struct ite_ec_config *const conf)
for (i = 0; i < ITE_EC_FAN_CNT; ++i)
enable_fan(base, i + 1, &conf->fan[i]);
+ /* Enable beeps if configured */
+ enable_beeps(base, conf);
+
/*
* System may get wrong temperature data when SIO is in
* busy state. Therefore, check the status and terminate
diff --git a/src/superio/ite/common/env_ctrl.h b/src/superio/ite/common/env_ctrl.h
index 8ce682e4d0..020f383be7 100644
--- a/src/superio/ite/common/env_ctrl.h
+++ b/src/superio/ite/common/env_ctrl.h
@@ -114,8 +114,10 @@ static const u8 ITE_EC_TEMP_ADJUST[] = { 0x56, 0x57, 0x59 };
#define ITE_EC_BEEP_ON_VIN_LIMIT (1 << 1)
#define ITE_EC_BEEP_ON_FAN_LIMIT (1 << 0)
#define ITE_EC_BEEP_FREQ_DIV_OF_FAN 0x5D
-#define ITE_EC_BEEP_FREQ_DIV_OF_VOLT 0x5E
-#define ITE_EC_BEEP_FREQ_DIV_OF_TEMP 0x5F
+#define ITE_EC_BEEP_FREQ_DIV_OF_VIN 0x5E
+#define ITE_EC_BEEP_FREQ_DIV_OF_TMPIN 0x5F
+#define ITE_EC_BEEP_TONE_DIVISOR(x) (((x) & 0x0f) << 4)
+#define ITE_EC_BEEP_FREQ_DIVISOR(x) (((x) & 0x0f) << 0)
#define ITE_EC_FAN_CTL_TEMP_LIMIT_OFF(x) (0x60 + ((x)-1) * 8)
#define ITE_EC_FAN_CTL_TEMP_LIMIT_START(x) (0x61 + ((x)-1) * 8)
diff --git a/src/superio/ite/common/env_ctrl_chip.h b/src/superio/ite/common/env_ctrl_chip.h
index a3c6ae4b33..f8f2e1ef0e 100644
--- a/src/superio/ite/common/env_ctrl_chip.h
+++ b/src/superio/ite/common/env_ctrl_chip.h
@@ -92,7 +92,9 @@ struct ite_ec_config {
*/
struct ite_ec_fan_config fan[ITE_EC_FAN_CNT];
- /* FIXME: enable beep when exceeding TMPIN, VIN, FAN limits */
+ bool tmpin_beep;
+ bool fan_beep;
+ bool vin_beep;
};
/* Some shorthands for device trees */