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: Frank Crawford <frank@crawford.emu.id.au> Link: https://lore.kernel.org/r/20230707123005.956415-4-frank@crawford.emu.id.au Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
parent
2f60e59329
commit
6593eac899
|
@ -221,6 +221,10 @@ static bool fix_pwm_polarity;
|
||||||
* Super-I/O configuration space.
|
* Super-I/O configuration space.
|
||||||
*/
|
*/
|
||||||
#define IT87_REG_VID 0x0a
|
#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
|
* The IT8705F and IT8712F earlier than revision 0x08 use register 0x0b
|
||||||
* for fan divisors. Later IT8712F revisions must use 16-bit tachometer
|
* 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
|
* 0 = disabled
|
||||||
*/
|
*/
|
||||||
u8 reg, extra;
|
u8 reg, extra;
|
||||||
int type = 0;
|
int ttype, type = 0;
|
||||||
|
|
||||||
reg = data->sensor; /* In case value is updated while used */
|
/* Detect PECI vs. AMDTSI */
|
||||||
extra = data->extra;
|
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 = 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)) ||
|
if ((has_temp_peci(data, index) && (reg >> 6 == index + 1)) ||
|
||||||
(has_temp_old_peci(data, index) && (extra & 0x80)))
|
(has_temp_old_peci(data, index) && (extra & 0x80)))
|
||||||
type = 6; /* Intel PECI */
|
type = ttype; /* Intel PECI or AMDTSI */
|
||||||
else if (reg & BIT(index))
|
else if (reg & BIT(index))
|
||||||
type = 3; /* thermal diode */
|
type = 3; /* thermal diode */
|
||||||
else if (reg & BIT(index + 3))
|
else if (reg & BIT(index + 3))
|
||||||
|
|
Loading…
Reference in New Issue