diff options
Diffstat (limited to 'src/superio')
-rw-r--r-- | src/superio/ite/common/env_ctrl.c | 27 | ||||
-rw-r--r-- | src/superio/ite/common/env_ctrl.h | 6 | ||||
-rw-r--r-- | src/superio/ite/common/env_ctrl_chip.h | 4 |
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 */ |