Commit 6593eac8 authored by Frank Crawford's avatar Frank Crawford Committed by Guenter Roeck
Browse files

hwmon: (it87) Add support to detect sensor type AMDTSI



Add test for sensor type AMDTSI which is available on certain recent
chipsets.

Signed-off-by: default avatarFrank Crawford <frank@crawford.emu.id.au>
Link: https://lore.kernel.org/r/20230707123005.956415-4-frank@crawford.emu.id.au


Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent 2f60e593
Loading
Loading
Loading
Loading
+31 −4
Original line number Diff line number Diff line
@@ -221,6 +221,10 @@ static bool fix_pwm_polarity;
 * Super-I/O configuration space.
 */
#define IT87_REG_VID           0x0a

/* Interface Selection register on other chips */
#define IT87_REG_IFSEL         0x0a

/*
 * The IT8705F and IT8712F earlier than revision 0x08 use register 0x0b
 * for fan divisors. Later IT8712F revisions must use 16-bit tachometer
@@ -1170,14 +1174,37 @@ static int get_temp_type(struct it87_data *data, int index)
	 * 0 = disabled
	 */
	u8 reg, extra;
	int type = 0;
	int ttype, type = 0;

	/* Detect PECI vs. AMDTSI */
	ttype = 6;
	if ((has_temp_peci(data, index)) || data->type == it8721 ||
	    data->type == it8720) {
		extra = it87_read_value(data, IT87_REG_IFSEL);
		if ((extra & 0x70) == 0x40)
			ttype = 5;
	}

	reg = data->sensor;	/* In case value is updated while used */
	extra = data->extra;
	reg = it87_read_value(data, IT87_REG_TEMP_ENABLE);

	/* Per chip special detection */
	switch (data->type) {
	case it8622:
		if (!(reg & 0xc0) && index == 3)
			type = ttype;
		break;
	default:
		break;
	}

	if (type || index >= 3)
		return type;

	extra = it87_read_value(data, IT87_REG_TEMP_EXTRA);

	if ((has_temp_peci(data, index) && (reg >> 6 == index + 1)) ||
	    (has_temp_old_peci(data, index) && (extra & 0x80)))
		type = 6;	/* Intel PECI */
		type = ttype;	/* Intel PECI or AMDTSI */
	else if (reg & BIT(index))
		type = 3;	/* thermal diode */
	else if (reg & BIT(index + 3))