Re: [PATCH v2] hwmon: (it87) Add support for IT8689E

From: Guenter Roeck

Date: Fri Mar 20 2026 - 16:08:13 EST


On 3/20/26 07:43, Markus Hoffmann wrote:
Add support for the ITE IT8689E Super I/O chip. The IT8689E supports
newer autopwm, 12mV ADC, 16-bit fans, six fans, six PWM channels,
PWM frequency 2, six temperature inputs, and AVCC3.

Signed-off-by: Markus Hoffmann <markus@xxxxxxxxxxx>
---
Changes in v2:
- Add it8689 to the it8620/it8628 GPIO pin multiplexing checks in
it87_find() to avoid exposing ghost fans, garbage tachometer data,
and non-functional PWM controls on boards where those pins are
multiplexed as general-purpose I/O.


Sashiko still finds some problems:

https://sashiko.dev/#/patchset/20260320144323.4870-1-markus%40thehoffs.at

Thanks,
Guenter

drivers/hwmon/it87.c | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c
index 5cfb98a05..0dcf6bbac 100644
--- a/drivers/hwmon/it87.c
+++ b/drivers/hwmon/it87.c
@@ -16,6 +16,7 @@
* IT8622E Super I/O chip w/LPC interface
* IT8623E Super I/O chip w/LPC interface
* IT8628E Super I/O chip w/LPC interface
+ * IT8689E Super I/O chip w/LPC interface
* IT8705F Super I/O chip w/LPC interface
* IT8712F Super I/O chip w/LPC interface
* IT8716F Super I/O chip w/LPC interface
@@ -64,7 +65,7 @@
enum chips { it87, it8712, it8716, it8718, it8720, it8721, it8728, it8732,
it8771, it8772, it8781, it8782, it8783, it8786, it8790,
- it8792, it8603, it8620, it8622, it8628, it87952 };
+ it8792, it8603, it8620, it8622, it8628, it8689, it87952 };
static struct platform_device *it87_pdev[2];
@@ -162,6 +163,7 @@ static inline void superio_exit(int ioreg, bool noexit)
#define IT8622E_DEVID 0x8622
#define IT8623E_DEVID 0x8623
#define IT8628E_DEVID 0x8628
+#define IT8689E_DEVID 0x8689
#define IT87952E_DEVID 0x8695
/* Logical device 4 (Environmental Monitor) registers */
@@ -502,6 +504,14 @@ static const struct it87_devices it87_devices[] = {
| FEAT_SIX_TEMP | FEAT_VIN3_5V | FEAT_FANCTL_ONOFF,
.peci_mask = 0x07,
},
+ [it8689] = {
+ .name = "it8689",
+ .model = "IT8689E",
+ .features = FEAT_NEWER_AUTOPWM | FEAT_12MV_ADC | FEAT_16BIT_FANS
+ | FEAT_SIX_FANS | FEAT_IN7_INTERNAL | FEAT_SIX_PWM
+ | FEAT_PWM_FREQ2 | FEAT_SIX_TEMP | FEAT_AVCC3,
+ .smbus_bitmap = BIT(1) | BIT(2),
+ },
[it87952] = {
.name = "it87952",
.model = "IT87952E",
@@ -2785,6 +2795,9 @@ static int __init it87_find(int sioaddr, unsigned short *address,
case IT8628E_DEVID:
sio_data->type = it8628;
break;
+ case IT8689E_DEVID:
+ sio_data->type = it8689;
+ break;
case IT87952E_DEVID:
sio_data->type = it87952;
break;
@@ -2952,7 +2965,8 @@ static int __init it87_find(int sioaddr, unsigned short *address,
sio_data->beep_pin = superio_inb(sioaddr,
IT87_SIO_BEEP_PIN_REG) & 0x3f;
- } else if (sio_data->type == it8620 || sio_data->type == it8628) {
+ } else if (sio_data->type == it8620 || sio_data->type == it8628 ||
+ sio_data->type == it8689) {
int reg;
superio_select(sioaddr, GPIO);