Releases: maximevince/VoodooI2CPCI
Releases · maximevince/VoodooI2CPCI
More PCI identifiers; sleep support; longer timeout
- More PCI identifiers supported:
- pci8086,9d60
- pci8086,9d61
- pci8086,a160
- pci8086,a161
- Sleep support
- Longer initial timeout (needed for some laptops)
Binary kext attached.
As before:
- Make sure AppleIntelLpssI2C.kext is disabled
- Try the kext, before installing it:
$> sudo cp -R ~/Downloads/VoodooI2C.kext /tmp
$> sudo kextutil -v /tmp/VoodooI2C.kext
First working Skylake release
VoodooI2C driver that works on my Skylake ASUS UX305CA, with ELAN1000 touchpad.
First, you need to make sure the Apple I2C driver does not load:
sudo mv /System/Library/Extensions/AppleIntelLpssI2C.kext /System/Library/Extensions/AppleIntelLpssI2C.kext.old
(you can check with kextstat
)
Then, you might need to patch your DSDT to get the devices recognised correctly in your IORegistry.
You can use mine below as a reference, but copy-pasting will probably not help!
The I2C controller: (I removed an IF-condition splitting the body of this block)
Scope (_SB.PCI0)
{
Device (I2C0)
{
Name (LINK, "\\_SB.PCI0.I2C0")
Name (_HID, "INT3442") // _HID: Hardware ID
Method (_HRV, 0, NotSerialized) // _HRV: Hardware Revision
{
Return (LHRV (SB10))
}
Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings
{
Return (LCRS (SMD0, SB00, SIR0))
}
Method (_PSC, 0, NotSerialized) // _PSC: Power State Current
{
GETD (SB10)
}
Method (_PS0, 0, NotSerialized) // _PS0: Power State 0
{
LPD0 (SB10)
}
Method (_PS3, 0, NotSerialized) // _PS3: Power State 3
{
LPD3 (SB10)
}
Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (LSTA (SMD0))
}
Name (_ADR, 0x00150000) // _ADR: Address
Method (XDSM, 4, Serialized)
{
If (PCIC (Arg0))
{
Return (PCID (Arg0, Arg1, Arg2, Arg3))
}
Return (Zero)
}
}
}
and the I2C touchpad itself:
Scope (_SB.PCI0.I2C0)
{
Device (ETPD)
{
Name (_ADR, One) // _ADR: Address
Method (_HID, 0, NotSerialized) // _HID: Hardware ID
{
If (ELAN)
{
Return ("ELAN1000")
}
If (FOLT)
{
Return ("FTE1001")
}
Return ("ELAN1010")
}
Name (_CID, "PNP0C50") // _CID: Compatible ID
Name (_UID, One) // _UID: Unique ID
Name (_S0W, 0x03) // _S0W: S0 Device Wake State
Method (_S3W, 0, NotSerialized) // _S3W: S3 Device Wake State
{
If (LEqual (S0ID, Zero))
{
Return (0x03)
}
Else
{
Return (Zero)
}
}
Method (_DSM, 4, NotSerialized)
{
If (LEqual (Arg0, ToUUID ("3cdff6f7-4267-4555-ad05-b30a3d8938de") /* HID I2C Device */))
{
If (LEqual (Arg2, Zero))
{
If (LEqual (Arg1, One))
{
Return (Buffer (One)
{
0x03
})
}
Else
{
Return (Buffer (One)
{
0x00
})
}
}
If (LEqual (Arg2, One))
{
Return (One)
}
}
Else
{
Return (Buffer (One)
{
0x00
})
}
}
Method (_STA, 0, NotSerialized) // _STA: Status
{
If (LEqual (TPIF, Zero))
{
Return (Zero)
}
If (And (DSYN, One))
{
Return (Zero)
}
Return (0x0F)
}
Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings
{
Name (SBFI, ResourceTemplate ()
{
I2cSerialBusV2 (0x0015, ControllerInitiated, 0x00061A80,
AddressingMode7Bit, "\\_SB.PCI0.I2C0",
0x00, ResourceConsumer, , Exclusive,
)
Interrupt (ResourceConsumer, Level, ActiveLow, Shared, ,, )
{
0x0000006D,
}
})
Return (SBFI)
}
}
}
Try the KEXT manually, before installing it!
$> sudo cp -R ~/Downloads/VoodooI2C.kext /tmp
$> sudo kextutil -v /tmp/VoodooI2C.kext
If that works, you can install it using your favourite KEXT Installer.