Index: ig4_iic.c =================================================================== --- ig4_iic.c (revision 314567) +++ ig4_iic.c (working copy) @@ -538,7 +538,7 @@ v = reg_read(sc, IG4_REG_AUTO_LTR_VALUE); v = reg_read(sc, IG4_REG_COMP_VER); - if (v != IG4_COMP_VER) { + if (v < IG4_COMP_VER) { error = ENXIO; goto done; } Index: ig4_pci.c =================================================================== --- ig4_pci.c (revision 314567) +++ ig4_pci.c (working copy) @@ -74,10 +74,13 @@ #define PCI_CHIP_BRASWELL_I2C_5 0x22c58086 #define PCI_CHIP_BRASWELL_I2C_6 0x22c68086 #define PCI_CHIP_BRASWELL_I2C_7 0x22c78086 +#define PCI_CHIP_SKYLAKE_I2C_1 0xa1608086 +#define PCI_CHIP_SKYLAKE_I2C_2 0xa1618086 static int ig4iic_pci_probe(device_t dev) { + printf("TRYING %x\n", pci_get_devid(dev)); switch(pci_get_devid(dev)) { case PCI_CHIP_LYNXPT_LP_I2C_1: device_set_desc(dev, "Intel Lynx Point-LP I2C Controller-1"); @@ -103,6 +106,12 @@ case PCI_CHIP_BRASWELL_I2C_7: device_set_desc(dev, "Intel Braswell Serial I/O I2C Port 7"); break; + case PCI_CHIP_SKYLAKE_I2C_1: + device_set_desc(dev, "Sunrise Point-H Serial IO I2C Controller Port 1"); + break; + case PCI_CHIP_SKYLAKE_I2C_2: + device_set_desc(dev, "Sunrise Point-H Serial IO I2C Controller Port 2"); + break; default: return (ENXIO); } @@ -124,6 +133,9 @@ ig4iic_pci_detach(dev); return (ENXIO); } + if (pci_get_devid(dev) == PCI_CHIP_SKYLAKE_I2C_1 || + pci_get_devid(dev) == PCI_CHIP_SKYLAKE_I2C_2) + bus_write_4(sc->regs_res, 0x204, (3 | 1 << 2)); sc->intr_rid = 0; if (pci_alloc_msi(dev, &sc->intr_rid)) { device_printf(dev, "Using MSI\n");