aboutsummaryrefslogtreecommitdiff
path: root/src/superio/ite/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/superio/ite/common')
-rw-r--r--src/superio/ite/common/env_ctrl.c16
-rw-r--r--src/superio/ite/common/env_ctrl.h20
-rw-r--r--src/superio/ite/common/env_ctrl_chip.h23
3 files changed, 48 insertions, 11 deletions
diff --git a/src/superio/ite/common/env_ctrl.c b/src/superio/ite/common/env_ctrl.c
index 1e313ce715..c8274db6c8 100644
--- a/src/superio/ite/common/env_ctrl.c
+++ b/src/superio/ite/common/env_ctrl.c
@@ -99,13 +99,13 @@ static void enable_peci(const u16 base, const u8 tmpin)
* into TMPINx register
*/
static void enable_tmpin(const u16 base, const u8 tmpin,
- const enum ite_ec_thermal_mode mode)
+ const struct ite_ec_thermal_config *const conf)
{
u8 reg;
reg = ite_ec_read(base, ITE_EC_ADC_TEMP_CHANNEL_ENABLE);
- switch (mode) {
+ switch (conf->mode) {
case THERMAL_DIODE:
reg |= ITE_EC_ADC_TEMP_DIODE_MODE(tmpin);
break;
@@ -115,12 +115,20 @@ static void enable_tmpin(const u16 base, const u8 tmpin,
default:
printk(BIOS_WARNING,
"Unsupported thermal mode 0x%x on TMPIN%d\n",
- mode, tmpin);
+ conf->mode, tmpin);
return;
}
ite_ec_write(base, ITE_EC_ADC_TEMP_CHANNEL_ENABLE, reg);
+ /* Set temperature offsets */
+ if (conf->mode != THERMAL_RESISTOR) {
+ reg = ite_ec_read(base, ITE_EC_BEEP_ENABLE);
+ reg |= ITE_EC_TEMP_ADJUST_WRITE_ENABLE;
+ ite_ec_write(base, ITE_EC_BEEP_ENABLE, reg);
+ ite_ec_write(base, ITE_EC_TEMP_ADJUST[tmpin-1], conf->offset);
+ }
+
/* Enable the startup of monitoring operation */
reg = ite_ec_read(base, ITE_EC_CONFIGURATION);
reg |= ITE_EC_CONFIGURATION_START;
@@ -233,7 +241,7 @@ void ite_ec_init(const u16 base, const struct ite_ec_config *const conf)
/* Enable HWM if configured */
for (i = 0; i < ITE_EC_TMPIN_CNT; ++i)
- enable_tmpin(base, i + 1, conf->tmpin_mode[i]);
+ enable_tmpin(base, i + 1, &conf->tmpin[i]);
/* Enable reading of voltage pins */
ite_ec_write(base, ITE_EC_ADC_VOLTAGE_CHANNEL_ENABLE, conf->vin_mask);
diff --git a/src/superio/ite/common/env_ctrl.h b/src/superio/ite/common/env_ctrl.h
index fa131166c0..1be6436310 100644
--- a/src/superio/ite/common/env_ctrl.h
+++ b/src/superio/ite/common/env_ctrl.h
@@ -93,6 +93,26 @@
#define ITE_EC_ADC_TEMP_DIODE_MODE(x) (1 << ((x)-1))
#define ITE_EC_ADC_TEMP_EXTRA_CHANNEL_ENABLE 0x55
+/* Matches length of ITE_EC_TMPIN_CNT */
+static const u8 ITE_EC_TEMP_ADJUST[] = { 0x56, 0x57, 0x59 };
+
+#define ITE_EC_BEEP_ENABLE 0x5C
+#define ITE_EC_TEMP_ADJUST_WRITE_ENABLE (1 << 7)
+#define ITE_EC_ADC_CLOCK_1MHZ (6 << 4)
+#define ITE_EC_ADC_CLOCK_2MHZ (7 << 4)
+#define ITE_EC_ADC_CLOCK_24MHZ (5 << 4)
+#define ITE_EC_ADC_CLOCK_31KHZ (4 << 4)
+#define ITE_EC_ADC_CLOCK_62KHZ (3 << 4)
+#define ITE_EC_ADC_CLOCK_125KHZ (2 << 4)
+#define ITE_EC_ADC_CLOCK_250KHZ (1 << 4)
+#define ITE_EC_ADC_CLOCK_500KHZ (0 << 4)
+#define ITE_EC_BEEP_ON_TMP_LIMIT (1 << 2)
+#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_FAN_CTL_TEMP_LIMIT_OFF(x) (0x60 + ((x)-1) * 8)
#define ITE_EC_FAN_CTL_TEMP_LIMIT_START(x) (0x61 + ((x)-1) * 8)
#define ITE_EC_FAN_CTL_TEMP_LIMIT_FULL(x) (0x62 + ((x)-1) * 8)
diff --git a/src/superio/ite/common/env_ctrl_chip.h b/src/superio/ite/common/env_ctrl_chip.h
index f01c574d47..8eb908e77a 100644
--- a/src/superio/ite/common/env_ctrl_chip.h
+++ b/src/superio/ite/common/env_ctrl_chip.h
@@ -28,6 +28,12 @@ enum ite_ec_thermal_mode {
THERMAL_RESISTOR,
};
+struct ite_ec_thermal_config {
+ enum ite_ec_thermal_mode mode;
+ /* Offset is used for diode sensors and PECI */
+ u8 offset;
+};
+
/* Bit mask for voltage pins VINx */
enum ite_ec_voltage_pin {
VIN0 = 0x01,
@@ -74,25 +80,28 @@ struct ite_ec_config {
u8 peci_tmpin;
/*
- * Enable thermal mode on TMPINx.
+ * Enable reading of voltage pins VINx.
*/
- enum ite_ec_thermal_mode tmpin_mode[ITE_EC_TMPIN_CNT];
+ enum ite_ec_voltage_pin vin_mask;
/*
- * Enable reading of voltage pins VINx.
+ * Enable temperature sensors in given mode.
*/
- enum ite_ec_voltage_pin vin_mask;
+ struct ite_ec_thermal_config tmpin[ITE_EC_TMPIN_CNT];
/*
* Enable a FAN in given mode.
*/
struct ite_ec_fan_config fan[ITE_EC_FAN_CNT];
+
+ /* FIXME: enable beep when exceeding TMPIN, VIN, FAN limits */
};
/* Some shorthands for device trees */
-#define TMPIN1 ec.tmpin_mode[0]
-#define TMPIN2 ec.tmpin_mode[1]
-#define TMPIN3 ec.tmpin_mode[2]
+#define TMPIN1 ec.tmpin[0]
+#define TMPIN2 ec.tmpin[1]
+#define TMPIN3 ec.tmpin[2]
+
#define FAN1 ec.fan[0]
#define FAN2 ec.fan[1]
#define FAN3 ec.fan[2]