* 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
if (type)
return type;
- /* Dectect PECI vs. AMDTSI if possible */
+ /* Dectect PECI vs. AMDTSI */
ttype = 6;
- if ((has_temp_peci(data, index)) && data->type != it8721) {
- extra = data->read(data, 0x98); /* PCH/AMDTSI host status */
- if (extra & BIT(6))
+ if ((has_temp_peci(data, index)) || data->type == it8721 ||
+ data->type == it8720) {
+ extra = data->read(data, IT87_REG_IFSEL);
+ if ((extra & 0x70) == 0x40)
ttype = 5;
}
/* Initialize register pointers */
it87_init_regs(pdev);
+ /*
+ * We need to disable SMBus before we can read any registers in
+ * the envmon address space, even if it is for chip identification
+ * purposes. If the chip has SMBus client support, it likely also has
+ * multi-page envmon registers, so we have to set the page anyway
+ * before accessing those registers. Kind of a chicken-and-egg
+ * problem.
+ * Fortunately, the chip was already identified through the SIO
+ * address space, only recent chips are affected, and this is just
+ * an additional safeguard.
+ */
err = smbus_disable(data);
if (err)
return err;
MODULE_PARM_DESC(fix_pwm_polarity,
"Force PWM polarity to active high (DANGEROUS)");
MODULE_LICENSE("GPL");
+MODULE_VERSION(IT87_DRIVER_VERSION);
module_init(sm_it87_init);
module_exit(sm_it87_exit);