From 4e8f23b896fe31851c26e056ee55fb8191419fa0 Mon Sep 17 00:00:00 2001 From: Ted Kuo Date: Wed, 18 Mar 2015 10:42:22 +0800 Subject: superio/it8772f: Add switch to enable HWM (Hardware Monitor) Set up External Temperature to read via thermal diode/resistor into TMPINx register by setting thermal_mode switch. Original-Signed-off-by: Ted Kuo Change-Id: I0e8621b92faa5c6246e009d2f852c8d4db484034 Original-Reviewed-on: https://chromium-review.googlesource.com/260545 Original-Reviewed-by: Shawn N Original-Tested-by: Ted Kuo Original-(cherry picked from commit 973e2d393f2595b756f8aa20f6fbe3b6e045621a) Original-Reviewed-on: https://chromium-review.googlesource.com/262340 Signed-off-by: Matt DeVillier Reviewed-on: https://review.coreboot.org/12798 Tested-by: build bot (Jenkins) Reviewed-by: Alexandru Gagniuc --- src/superio/ite/it8772f/superio.c | 44 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'src/superio/ite/it8772f/superio.c') diff --git a/src/superio/ite/it8772f/superio.c b/src/superio/ite/it8772f/superio.c index 7079b1a829..2d897d83ba 100644 --- a/src/superio/ite/it8772f/superio.c +++ b/src/superio/ite/it8772f/superio.c @@ -16,6 +16,7 @@ #include #include +#include #include #include #include @@ -96,6 +97,43 @@ static void it8772f_enable_peci(struct resource *res, int tmpin) (tmpin & 3) << 6); } +/* + * Set up External Temperature to read via thermal diode/resistor + * into TMPINx register + */ +static void it8772f_enable_tmpin(struct resource *res, int tmpin, + enum thermal_mode mode) +{ + u8 reg; + + if (tmpin != 1 && tmpin != 2) + return; + + reg = it8772f_envc_read(res, IT8772F_ADC_TEMP_CHANNEL_ENABLE); + + switch (mode) { + case THERMAL_DIODE: + /* Thermal Diode Mode */ + it8772f_envc_write(res, IT8772F_ADC_TEMP_CHANNEL_ENABLE, + reg | tmpin); + break; + case THERMAL_RESISTOR: + /* Thermal Resistor Mode */ + it8772f_envc_write(res, IT8772F_ADC_TEMP_CHANNEL_ENABLE, + reg | (tmpin << 3)); + break; + default: + printk(BIOS_ERR, "Unsupported thermal mode 0x%x on TMPIN%d\n", + mode, tmpin); + return; + } + + reg = it8772f_envc_read(res, IT8772F_CONFIGURATION); + + /* Enable the startup of monitoring operation */ + it8772f_envc_write(res, IT8772F_CONFIGURATION, reg | 0x01); +} + /* * Setup a FAN PWM interface for software control */ @@ -160,6 +198,12 @@ static void it8772f_init(struct device *dev) /* Enable PECI if configured */ it8772f_enable_peci(res, conf->peci_tmpin); + /* Enable HWM if configured */ + if (conf->tmpin1_mode != THERMAL_MODE_DISABLED) + it8772f_enable_tmpin(res, 1, conf->tmpin1_mode); + if (conf->tmpin2_mode != THERMAL_MODE_DISABLED) + it8772f_enable_tmpin(res, 2, conf->tmpin2_mode); + /* Enable FANx if configured */ if (conf->fan1_enable) it8772f_enable_fan(res, 1); -- cgit v1.2.3