2222 * IT8655E Super I/O chip w/LPC interface
2323 * IT8665E Super I/O chip w/LPC interface
2424 * IT8686E Super I/O chip w/LPC interface
25+ * IT8688E Super I/O chip w/LPC interface
2526 * IT8705F Super I/O chip w/LPC interface
2627 * IT8712F Super I/O chip w/LPC interface
2728 * IT8716F Super I/O chip w/LPC interface
@@ -83,7 +84,7 @@ enum chips { it87, it8712, it8716, it8718, it8720, it8721, it8728, it8732,
8384 it8736 , it8738 ,
8485 it8771 , it8772 , it8781 , it8782 , it8783 , it8786 , it8790 ,
8586 it8792 , it8603 , it8606 , it8607 , it8613 , it8620 , it8622 , it8625 ,
86- it8628 , it8655 , it8665 , it8686 , it8528 };
87+ it8628 , it8655 , it8665 , it8686 , it8528 , it8688 };
8788
8889static unsigned short force_id ;
8990module_param (force_id , ushort , 0000 );
@@ -200,6 +201,7 @@ static inline void superio_exit(int ioreg, bool doexit)
200201#define IT8665E_DEVID 0x8665
201202#define IT8686E_DEVID 0x8686
202203#define IT8528E_DEVID 0x8528
204+ #define IT8688E_DEVID 0x8688
203205
204206/* Logical device 4 (Environmental Monitor) registers */
205207#define IT87_ACT_REG 0x30
@@ -742,6 +744,18 @@ static const struct it87_devices it87_devices[] = {
742744 .num_temp_map = 7 ,
743745 .smbus_bitmap = BIT (1 ) | BIT (2 ),
744746 },
747+ [it8688 ] = {
748+ .name = "it8688" ,
749+ .model = "IT8688E" ,
750+ .features = FEAT_NEWER_AUTOPWM | FEAT_12MV_ADC | FEAT_16BIT_FANS
751+ | FEAT_SIX_FANS | FEAT_NEW_TEMPMAP
752+ | FEAT_IN7_INTERNAL | FEAT_SIX_PWM | FEAT_PWM_FREQ2
753+ | FEAT_SIX_TEMP | FEAT_BANK_SEL | FEAT_SCALING | FEAT_AVCC3 ,
754+ .num_temp_limit = 6 ,
755+ .num_temp_offset = 6 ,
756+ .num_temp_map = 7 ,
757+ .smbus_bitmap = BIT (1 ) | BIT (2 ),
758+ },
745759};
746760
747761#define has_16bit_fans (data ) ((data)->features & FEAT_16BIT_FANS)
@@ -1481,6 +1495,7 @@ static int get_temp_type(struct it87_data *data, int index)
14811495
14821496 switch (data -> type ) {
14831497 case it8686 :
1498+ case it8688 :
14841499 if (src1 < 9 )
14851500 type = temp_types_8686 [index ][src1 ];
14861501 break ;
@@ -3127,6 +3142,9 @@ static int __init it87_find(int sioaddr, unsigned short *address,
31273142 case IT8686E_DEVID :
31283143 sio_data -> type = it8686 ;
31293144 break ;
3145+ case IT8688E_DEVID :
3146+ sio_data -> type = it8688 ;
3147+ break ;
31303148 case 0xffff : /* No device at all */
31313149 goto exit ;
31323150 default :
@@ -3343,7 +3361,8 @@ static int __init it87_find(int sioaddr, unsigned short *address,
33433361 sio_data -> beep_pin = superio_inb (sioaddr ,
33443362 IT87_SIO_BEEP_PIN_REG ) & 0x3f ;
33453363 } else if (sio_data -> type == it8620 || sio_data -> type == it8628 ||
3346- sio_data -> type == it8686 || sio_data -> type == it8528 ) {
3364+ sio_data -> type == it8686 || sio_data -> type == it8528 ||
3365+ sio_data -> type == it8688 ) {
33473366 int reg ;
33483367
33493368 superio_select (sioaddr , GPIO );
@@ -3388,7 +3407,7 @@ static int __init it87_find(int sioaddr, unsigned short *address,
33883407 reg = superio_inb (sioaddr , IT87_SIO_PINX2_REG );
33893408 if (reg & BIT (0 )) {
33903409 /* For it8686, the bit just enables AVCC3 */
3391- if (sio_data -> type != it8686 )
3410+ if (sio_data -> type != it8686 && sio_data -> type != it8688 )
33923411 sio_data -> internal |= BIT (0 );
33933412 } else {
33943413 sio_data -> internal &= ~BIT (3 );
@@ -3765,6 +3784,7 @@ static void it87_init_regs(struct platform_device *pdev)
37653784 case it8528 :
37663785 case it8628 :
37673786 case it8686 :
3787+ case it8688 :
37683788 data -> REG_FAN = IT87_REG_FAN ;
37693789 data -> REG_FANX = IT87_REG_FANX ;
37703790 data -> REG_FAN_MIN = IT87_REG_FAN_MIN ;
@@ -3895,6 +3915,7 @@ static void it87_init_device(struct platform_device *pdev)
38953915 case it8528 :
38963916 case it8628 :
38973917 case it8686 :
3918+ case it8688 :
38983919 if (tmp & BIT (2 ))
38993920 data -> has_fan |= BIT (5 ); /* fan6 enabled */
39003921 break ;
@@ -3917,6 +3938,7 @@ static void it87_init_device(struct platform_device *pdev)
39173938 switch (data -> type ) {
39183939 case it8620 :
39193940 case it8686 :
3941+ case it8688 :
39203942 tmp = data -> read (data , IT87_REG_FAN_DIV );
39213943 if (!(tmp & BIT (3 )))
39223944 sio_data -> skip_pwm |= BIT (5 );
0 commit comments