TouchPad with VoodooI2C - fidele007/Asus-ROG-GL552VW-Hackintosh GitHub Wiki
Since the ASUS ROG GL552VW's touchpad is an I2C device, RehabMan's VoodooPS2Controller won't work. You're going to need VoodooI2C, and this section will cover the guide and how I got it to work for this machine.
The kexts are available for download here.
According to the guide, you need to apply three pre-made patches under _VoodooI2C-Patches to your DSDT using MaciASL:
- [Windows] Windows 10 Patch (optional. apply only if you have not done a Windows patch.)
- [Controllers] I2C Controllers [SKL]
- [GPIO] GPIO Controller Enable [SKL+]
I have already applied RehabMan's patch [sys] OS Check Fix (Windows 8)
, so my Windows patch looks likes this :
If(LOr(_OSI("Darwin"),_OSI("Windows 2012")))
{
Store (0x07DC, OSYS)
}
Your mileage may vary.
However, that is not enough because you also need to manually do GPIO pinning.
First, I looked for the BIOS name of the touchpad in Windows Device Manager where my touchpad is working correctly, and it is \_SB.PCI0.I2C1.ETPD
.
Next, I need to get the hexadcimal APIC pin number of the touchpad. To to that, I copy VoodooI2C.kext
to CLOVER/kexts/Other
, reboot, open IORegistryExplorer, search for I2C1
(from the BIOS name) and check the IOInterruptSpecifiers
of the child item of the I2C1
node. The display value is <5f ...>. I only need the first two digits to make up the hexadcimal APIC pin number: 0x5f
. According to the guide, if the pin number is less than or equal to 0x2F
, then I can just go ahead and install the kexts, but as you can see, this is not the case.
I also need to make sure that my I2C Serial Bus Name
is correctly labelled, so I go to the scope _SB.PCI0.I2C1
in my DSDT to check and see this:
Scope (_SB.PCI0.I2C1)
{
Device (ETPD)
{
Name (SBFB, ResourceTemplate ()
{
I2cSerialBusV2 (0x004C, ControllerInitiated, 0x00061A80,
AddressingMode7Bit, "\\_SB.PCI0.I2C1",
0x00, ResourceConsumer, _Y34, Exclusive,
)
})
Name (SBFI, ResourceTemplate ()
{
Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, )
{
0x0000005F,
}
})
...
I have both SBFB
and SBFI
, but I only need SBFB
, so I remove the SBFI
Name.
I'm also missing the SBFG
resource template which is needed for GPIO pinning, so I add it at the beginning of the touchpad's entry:
Scope (_SB.PCI0.I2C1)
{
Device (ETPD)
{
Name (SBFG, ResourceTemplate ()
{
GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000,
"\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x0000
}
})
...
Now I can add the GPIO pin. I take a look at this list and search for my hexadcimal APIC pin number (0x5f
) in the right column. I see that it is defined with GPP_C23_IRQ
. I then look at this list to find the corresponding GPIO pin to GPP_C23
: 71
, which is 0x47
in hexadcimal, and this is the GPIO pin to put into ResourceTemplate
of SBFG
:
Scope (_SB.PCI0.I2C1)
{
Device (ETPD)
{
Name (SBFG, ResourceTemplate ()
{
GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000,
"\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x47
}
})
...
Finally, I check the _CRS
method and change the return value from Return (ConcatenateResTemplate (SBFB, SBFI))
to Return (ConcatenateResTemplate (SBFB, SBFG))
since I've already deleted the SBFI
name and replace it with SBFG
.
I save my patched DSDT to /CLOVER/ACPI/patched
and install the VoodooI2C kexts for my ELAN touchpad to CLOVER/kexts/Other
:
- VoodooI2C.kext
- VoodooI2CELAN.kext
I restart my machine to confirm that the touchpad is working correctly. If it doesn't, check to make sure that Clover is properly injecting the kexts by setting InjectKexts
to Yes
.
I can even turn it off when an external mouse is connected. Cool!