diff options
author | Frank Crawford <frank@crawford.emu.id.au> | 2023-04-29 14:52:05 +0300 |
---|---|---|
committer | Guenter Roeck <linux@roeck-us.net> | 2023-06-08 16:41:17 +0300 |
commit | bd5940221b7d49addfa5e80f3cf8fcd7cedd4dc5 (patch) | |
tree | a8aba89316d9c04a7fdace915e2fb39a16e5d63c /drivers | |
parent | 39a6dcf640a5fc0aa880a8cf8871755fdbd42a5e (diff) | |
download | linux-bd5940221b7d49addfa5e80f3cf8fcd7cedd4dc5.tar.xz |
hwmon: (it87) Update IT8732F chip for 4 fans and PWMs
Add support for 4 fans and 4 PWMs to chipset IT8732F.
Signed-off-by: Frank Crawford <frank@crawford.emu.id.au>
Link: https://lore.kernel.org/r/20230429115205.1547251-4-frank@crawford.emu.id.au
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/hwmon/it87.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c index d5482c6ed18f..96c17660ff0f 100644 --- a/drivers/hwmon/it87.c +++ b/drivers/hwmon/it87.c @@ -377,7 +377,8 @@ static const struct it87_devices it87_devices[] = { .model = "IT8732F", .features = FEAT_NEWER_AUTOPWM | FEAT_16BIT_FANS | FEAT_TEMP_OFFSET | FEAT_TEMP_OLD_PECI | FEAT_TEMP_PECI - | FEAT_10_9MV_ADC | FEAT_IN7_INTERNAL, + | FEAT_10_9MV_ADC | FEAT_IN7_INTERNAL | FEAT_FOUR_FANS + | FEAT_FOUR_PWM, .peci_mask = 0x07, .old_peci_mask = 0x02, /* Actually reports PCH */ }, @@ -2934,6 +2935,34 @@ 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 == it8732) { + int reg; + + superio_select(sioaddr, GPIO); + + /* Check for pwm2, fan2 */ + reg = superio_inb(sioaddr, IT87_SIO_GPIO5_REG); + if (reg & BIT(1)) + sio_data->skip_pwm |= BIT(1); + if (reg & BIT(2)) + sio_data->skip_fan |= BIT(1); + + /* Check for pwm3, fan3, fan4 */ + reg = superio_inb(sioaddr, IT87_SIO_GPIO3_REG); + if (reg & BIT(6)) + sio_data->skip_pwm |= BIT(2); + if (reg & BIT(7)) + sio_data->skip_fan |= BIT(2); + if (reg & BIT(5)) + sio_data->skip_fan |= BIT(3); + + /* Check if AVCC is on VIN3 */ + reg = superio_inb(sioaddr, IT87_SIO_PINX2_REG); + if (reg & BIT(0)) + sio_data->internal |= BIT(0); + + sio_data->beep_pin = superio_inb(sioaddr, + IT87_SIO_BEEP_PIN_REG) & 0x3f; } else { int reg; bool uart6; |