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!

⚠️ **GitHub.com Fallback** ⚠️