All of lore.kernel.org
 help / color / mirror / Atom feed
* [lm-sensors] [PATCH v2] hwmon: (it87) Add support for AMDTSI, and restrict sensor type configuration
@ 2012-11-03 16:29 Guenter Roeck
  2012-11-03 20:11 ` [lm-sensors] [PATCH v2] hwmon: (it87) Add support for AMDTSI, and restrict sensor type configura Jean Delvare
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: Guenter Roeck @ 2012-11-03 16:29 UTC (permalink / raw)
  To: lm-sensors

Add support to detect and report AMDTSI temperature sensor types.
Only enable PECI and AMDTSI sensor selection if the chip is configured
for it.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
---
Applies on top of the previously submitted patches.
Only tested with IT8728F and Intel CPU.

v2: Add AMDTSI support to IT8728F.

 drivers/hwmon/it87.c |   68 +++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 62 insertions(+), 6 deletions(-)

diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c
index 6a1410b..ab5a8c5 100644
--- a/drivers/hwmon/it87.c
+++ b/drivers/hwmon/it87.c
@@ -228,6 +228,8 @@ static const u8 IT87_REG_TEMP_OFFSET[]	= { 0x56, 0x57, 0x59 };
 #define IT87_REG_AUTO_TEMP(nr, i) (0x60 + (nr) * 8 + (i))
 #define IT87_REG_AUTO_PWM(nr, i)  (0x65 + (nr) * 8 + (i))
 
+#define IT87_REG_AMDTSI_HSR    0x98
+
 struct it87_devices {
 	const char *name;
 	u16 features;
@@ -331,6 +333,7 @@ struct it87_data {
 	u16 features;
 	u8 peci_mask;
 	u8 old_peci_mask;
+	u8 ext_temp_type;	/* external temperature sensor type (5 or 6) */
 
 	unsigned short addr;
 	const char *name;
@@ -643,7 +646,7 @@ static ssize_t show_temp_type(struct device *dev, struct device_attribute *attr,
 
 	if ((has_temp_peci(data, nr) && (reg >> 6 = nr + 1))
 	    || (has_temp_old_peci(data, nr) && (extra & 0x80)))
-		return sprintf(buf, "6\n");  /* Intel PECI */
+		return sprintf(buf, "%u\n", data->ext_temp_type);
 	if (reg & (1 << nr))
 		return sprintf(buf, "3\n");  /* thermal diode */
 	if (reg & (8 << nr))
@@ -667,24 +670,26 @@ static ssize_t set_temp_type(struct device *dev, struct device_attribute *attr,
 	reg = it87_read_value(data, IT87_REG_TEMP_ENABLE);
 	reg &= ~(1 << nr);
 	reg &= ~(8 << nr);
-	if (has_temp_peci(data, nr) && (reg >> 6 = nr + 1 || val = 6))
+	if (has_temp_peci(data, nr) && (reg >> 6 = nr + 1 ||
+					val = data->ext_temp_type))
 		reg &= 0x3f;
 	extra = it87_read_value(data, IT87_REG_TEMP_EXTRA);
-	if (has_temp_old_peci(data, nr) && ((extra & 0x80) || val = 6))
+	if (has_temp_old_peci(data, nr) && ((extra & 0x80) ||
+					    val = data->ext_temp_type))
 		extra &= 0x7f;
 	if (val = 2) {	/* backwards compatibility */
 		dev_warn(dev,
 			 "Sensor type 2 is deprecated, please use 4 instead\n");
 		val = 4;
 	}
-	/* 3 = thermal diode; 4 = thermistor; 6 = Intel PECI; 0 = disabled */
+	/* 3 = thermal diode; 4 = thermistor; 5/6 = AMDTSI/PECI; 0 = disabled */
 	if (val = 3)
 		reg |= 1 << nr;
 	else if (val = 4)
 		reg |= 8 << nr;
-	else if (has_temp_peci(data, nr) && val = 6)
+	else if (has_temp_peci(data, nr) && val = data->ext_temp_type)
 		reg |= (nr + 1) << 6;
-	else if (has_temp_old_peci(data, nr) && val = 6)
+	else if (has_temp_old_peci(data, nr) && val = data->ext_temp_type)
 		extra |= 0x80;
 	else if (val != 0)
 		return -EINVAL;
@@ -1988,6 +1993,7 @@ static int __devinit it87_probe(struct platform_device *pdev)
 	int err = 0, i;
 	int enable_pwm_interface;
 	int fan_beep_need_rw;
+	u8 reg;
 
 	res = platform_get_resource(pdev, IORESOURCE_IO, 0);
 	if (!devm_request_region(&pdev->dev, res->start, IT87_EC_EXTENT,
@@ -2030,6 +2036,56 @@ static int __devinit it87_probe(struct platform_device *pdev)
 		break;
 	}
 
+	if (data->features & FEAT_TEMP_OLD_PECI) {
+		reg = it87_read_value(data, IT87_REG_VID);
+		switch ((reg >> 4) & 0x07) {
+		case 0x0:
+		default:
+			data->features &+			  ~(FEAT_TEMP_OLD_PECI | FEAT_TEMP_PECI);
+			break;
+		case 0x3:	/* PCH (IT8721F) */
+			if (data->features & FEAT_TEMP_PECI) {
+				data->features &= ~FEAT_TEMP_PECI;
+				data->ext_temp_type = 6;
+			} else {
+				data->features &= ~FEAT_TEMP_OLD_PECI;
+			}
+			break;
+		case 0x4:	/* AMDTSI */
+			data->ext_temp_type = 5;
+			break;
+		case 0x5:	/* SST slave */
+		case 0x6:	/* PECI */
+		case 0x7:	/* SST host */
+			if (data->features & FEAT_TEMP_PECI)
+				data->features &= ~FEAT_TEMP_OLD_PECI;
+			data->ext_temp_type = 6;
+			break;
+		}
+	} else if (data->features & FEAT_TEMP_PECI) {
+		reg = it87_read_value(data, IT87_REG_VID);
+		switch ((reg >> 4) & 0x03) {
+		case 0x0:	/* disabled */
+			/* Check if AMDTSI is enabled */
+			if (reg & 0x40) {
+				reg = it87_read_value(data,
+						      IT87_REG_AMDTSI_HSR);
+				if (reg & 0x40) {
+					data->ext_temp_type = 5;
+					break;
+				}
+			}
+			data->features &= ~FEAT_TEMP_PECI;
+			break;
+		case 0x1:	/* SST slave */
+		case 0x2:	/* PECI */
+		case 0x3:	/* SST host */
+			data->ext_temp_type = 6;
+			break;
+		}
+	}
+
 	/* Now, we do the remaining detection. */
 	if ((it87_read_value(data, IT87_REG_CONFIG) & 0x80)
 	 || it87_read_value(data, IT87_REG_CHIPID) != 0x90)
-- 
1.7.9.7


_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2015-08-05 19:52 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-03 16:29 [lm-sensors] [PATCH v2] hwmon: (it87) Add support for AMDTSI, and restrict sensor type configuration Guenter Roeck
2012-11-03 20:11 ` [lm-sensors] [PATCH v2] hwmon: (it87) Add support for AMDTSI, and restrict sensor type configura Jean Delvare
2012-11-03 21:46 ` Guenter Roeck
2012-11-03 21:55 ` [lm-sensors] [PATCH v2] hwmon: (it87) Add support for AMDTSI, and restrict sensor type configur Jean Delvare
2015-08-04 21:48 ` [lm-sensors] [PATCH v2] hwmon: (it87) Add support for IT8732F Justin Maggard
2015-08-04 22:05 ` Guenter Roeck
2015-08-05 19:18 ` Justin Maggard
2015-08-05 19:38 ` Guenter Roeck
2015-08-05 19:52 ` Justin Maggard

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.