Contribute
Register

[SOLVED] VoodooI2C Touchpad only working in polling mode

Joined
Nov 21, 2022
Messages
12
Motherboard
Clevo NL51CU
CPU
i3-10110U
Graphics
UHD 620
Hi,

I am trying to make my touchpad work in GPIO interrupt mode and despite having the correct GPIO pin detected in IOReg, it still doesn't work (Pin 0x38, confirmed by setting it manually in the BIOS I unlocked). I have tried setting GPHD and TPDT to 0 and different values of TPDT (with the corresponding renaming TPDT,8 and TPDM,8 to XPDT,8 and XPDM,8 to avoid conflicts) and still not working in interrupt mode despite the pinning looking correct.

The specs of my laptop are :
Computer model Machenike Machcreator-A = Clevo NL4x_5xCU
Processor Intel Core i3-10110U
Memory 16 Gb DDR4 2667 MHz
Hard Disk Samsung 980 NVMe 1 Tb
Integrated Graphics Intel UHD Graphics 620
Monitor FHD 1920x1080 (15.6 inch)
Sound Card Realtek ALC293 (layout-id: 28)
Wireless Card Intel Wireless-AC 9462
Ethernet Card Realtek
Touchpad recognized on Windows, GNU/Linux and macOS as FTCS1000. ACPI Path seems to be _SB.PCI0.I2C0.TPD0 according to Windows device manager and DSDT.

I am currently using macOS Ventura 13.1 with OC 0.8.8 and already had the same problem on Monterey and Big Sur.

Could someone please help about this issue ? I have attached the DSDT.aml of my laptop (unpatched) and the EFI i am using currently. I hope there is enough information in this post.
Thanks
 

Attachments

  • EFI 2.zip
    14.3 MB · Views: 72
  • DSDT.aml.zip
    37.5 KB · Views: 46
  • IOReg2.zip
    818.8 KB · Views: 48
Last edited:
Hi,

I am trying to make my touchpad work in GPIO interrupt mode and despite having the correct GPIO pin detected in IOReg, it still doesn't work (Pin 0x38, confirmed by setting it manually in the BIOS I unlocked). I have tried setting GPHD and TPDT to 0 and different values of TPDT (with the corresponding renaming TPDT,8 and TPDM,8 to XPDT,8 and XPDM,8 to avoid conflicts) and still not working in interrupt mode despite the pinning looking correct.

The specs of my laptop are :
Computer model Machenike Machcreator-A = Clevo NL4x_5xCU
Processor Intel Core i3-10110U
Memory 16 Gb DDR4 2667 MHz
Hard Disk Samsung 980 NVMe 1 Tb
Integrated Graphics Intel UHD Graphics 620
Monitor FHD 1920x1080 (15.6 inch)
Sound Card Realtek ALC293 (layout-id: 28)
Wireless Card Intel Wireless-AC 9462
Ethernet Card Realtek
Touchpad recognized on Windows, GNU/Linux and macOS as FTCS1000. ACPI Path seems to be _SB.PCI0.I2C0.TPD0 according to Windows device manager and DSDT.

I am currently using macOS Ventura 13.1 with OC 0.8.8 and already had the same problem on Monterey and Big Sur.

Could someone please help about this issue ? I have attached the DSDT.aml of my laptop (unpatched) and the EFI i am using currently. I hope there is enough information in this post.
Thanks
doubt you really need all these boot arguments:
-liludbgall liludump=60 -vsmcdbg smcdebug=0xff alctcsel=1 keepsyms=1 debug=0x100 -vi2c-force-polling npci=0x2000 igfxonln=1 -igfxblr darkwake=515 -hbfx-disable-patch-pci gfxrst=1 -hbfx-dump-nvram hbfx-ahbm=1025

and you are forcing polling mode?


the way I did mine (ELAN1000) was to add the Find and Replace:

Code:
<dict>
                <key>Base</key>
                <string></string>
                <key>BaseSkip</key>
                <integer>0</integer>
                <key>Comment</key>
                <string>_SB.PCI0.I2C1.ETPD._CRS to _SB.PCI0.I2C1.ETPD.XCRS</string>
                <key>Count</key>
                <integer>0</integer>
                <key>Enabled</key>
                <true/>
                <key>Find</key>
                <data>
                oAp7RFNZTgEApACkCg8UEV9DUlMApIRTQkZCU0JGSQA=
                </data>
                <key>Limit</key>
                <integer>0</integer>
                <key>Mask</key>
                <data>
                </data>
                <key>OemTableId</key>
                <data>
                </data>
                <key>Replace</key>
                <data>
                oAp7RFNZTgEApACkCg8UEVhDUlMApIRTQkZCU0JGSQA=
                </data>
                <key>ReplaceMask</key>
                <data>
                </data>
                <key>Skip</key>
                <integer>0</integer>
                <key>TableLength</key>
                <integer>0</integer>
                <key>TableSignature</key>
                <data>
                RFNEVA==
                </data>
            </dict>
            <dict>
                <key>Base</key>
                <string></string>
                <key>BaseSkip</key>
                <integer>0</integer>
                <key>Comment</key>
                <string>GPIO._STA to GPIO.XSTA</string>
                <key>Count</key>
                <integer>0</integer>
                <key>Enabled</key>
                <true/>
                <key>Find</key>
                <data>
                X1NUQQCgCZNTQlJHAA==
                </data>
                <key>Limit</key>
                <integer>0</integer>
                <key>Mask</key>
                <data>
                </data>
                <key>OemTableId</key>
                <data>
                </data>
                <key>Replace</key>
                <data>
                WFNUQQCgCZNTQlJHAA==
                </data>
                <key>ReplaceMask</key>
                <data>
                </data>
                <key>Skip</key>
                <integer>0</integer>
                <key>TableLength</key>
                <integer>0</integer>
                <key>TableSignature</key>
                <data>
                RFNEVA==
                </data>
            </dict>

and also kext ordering is important:

Code:
<dict>
                <key>Arch</key>
                <string>Any</string>
                <key>BundlePath</key>
                <string>VoodooI2C.kext/Contents/Plugins/VoodooGPIO.kext</string>
                <key>Comment</key>
                <string>Touchpad</string>
                <key>Enabled</key>
                <true/>
                <key>ExecutablePath</key>
                <string>Contents/MacOS/VoodooGPIO</string>
                <key>MaxKernel</key>
                <string></string>
                <key>MinKernel</key>
                <string></string>
                <key>PlistPath</key>
                <string>Contents/Info.plist</string>
            </dict>
            <dict>
                <key>Arch</key>
                <string>Any</string>
                <key>BundlePath</key>
                <string>VoodooI2C.kext/Contents/Plugins/VoodooI2CServices.kext</string>
                <key>Comment</key>
                <string>Touchpad</string>
                <key>Enabled</key>
                <true/>
                <key>ExecutablePath</key>
                <string>Contents/MacOS/VoodooI2CServices</string>
                <key>MaxKernel</key>
                <string></string>
                <key>MinKernel</key>
                <string></string>
                <key>PlistPath</key>
                <string>Contents/Info.plist</string>
            </dict>
            <dict>
                <key>Arch</key>
                <string>Any</string>
                <key>BundlePath</key>
                <string>VoodooI2C.kext</string>
                <key>Comment</key>
                <string>Touchpad</string>
                <key>Enabled</key>
                <true/>
                <key>ExecutablePath</key>
                <string>Contents/MacOS/VoodooI2C</string>
                <key>MaxKernel</key>
                <string></string>
                <key>MinKernel</key>
                <string></string>
                <key>PlistPath</key>
                <string>Contents/Info.plist</string>
            </dict>
            <dict>
                <key>Arch</key>
                <string>Any</string>
                <key>BundlePath</key>
                <string>VoodooI2CELAN.kext</string>
                <key>Comment</key>
                <string>Touchpad</string>
                <key>Enabled</key>
                <true/>
                <key>ExecutablePath</key>
                <string>Contents/MacOS/VoodooI2CELAN</string>
                <key>MaxKernel</key>
                <string></string>
                <key>MinKernel</key>
                <string></string>
                <key>PlistPath</key>
                <string>Contents/Info.plist</string>
            </dict>
            <dict>
                <key>Arch</key>
                <string>Any</string>
                <key>BundlePath</key>
                <string>VoodooPS2Controller.kext</string>
                <key>Comment</key>
                <string>Touchpad</string>
                <key>Enabled</key>
                <true/>
                <key>ExecutablePath</key>
                <string>Contents/MacOS/VoodooPS2Controller</string>
                <key>MaxKernel</key>
                <string></string>
                <key>MinKernel</key>
                <string></string>
                <key>PlistPath</key>
                <string>Contents/Info.plist</string>
            </dict>
            <dict>
                <key>Arch</key>
                <string>Any</string>
                <key>BundlePath</key>
                <string>VoodooPS2Controller.kext/Contents/Plugins/VoodooPS2Keyboard.kext</string>
                <key>Comment</key>
                <string>Touchpad</string>
                <key>Enabled</key>
                <true/>
                <key>ExecutablePath</key>
                <string>Contents/MacOS/VoodooPS2Keyboard</string>
                <key>MaxKernel</key>
                <string></string>
                <key>MinKernel</key>
                <string></string>
                <key>PlistPath</key>
                <string>Contents/Info.plist</string>
            </dict>
            <dict>
                <key>Arch</key>
                <string>Any</string>
                <key>BundlePath</key>
                <string>VoodooPS2Controller.kext/Contents/Plugins/VoodooPS2Mouse.kext</string>
                <key>Comment</key>
                <string>Touchpad</string>
                <key>Enabled</key>
                <true/>
                <key>ExecutablePath</key>
                <string>Contents/MacOS/VoodooPS2Mouse</string>
                <key>MaxKernel</key>
                <string></string>
                <key>MinKernel</key>
                <string></string>
                <key>PlistPath</key>
                <string>Contents/Info.plist</string>
            </dict>
            <dict>
                <key>Arch</key>
                <string>Any</string>
                <key>BundlePath</key>
                <string>VoodooPS2Controller.kext/Contents/Plugins/VoodooInput.kext</string>
                <key>Comment</key>
                <string>Touchpad</string>
                <key>Enabled</key>
                <true/>
                <key>ExecutablePath</key>
                <string>Contents/MacOS/VoodooInput</string>
                <key>MaxKernel</key>
                <string></string>
                <key>MinKernel</key>
                <string></string>
                <key>PlistPath</key>
                <string>Contents/Info.plist</string>
            </dict>
also Lilu kext needs to be first in your list in your config.plist

and I used the following aml file
 

Attachments

  • SSDT-GPI0.aml
    239 bytes · Views: 76
Hi thanks for your answer,
I am using those boot args to help debugging the SMCBatteryManager issue, I will remove them when I'm done with the battery issue. I am forcing polling mode using the -vi2c-force-polling boot arg.

I can't find how to properly replace the corresponding strings in my DSDT, I tried to convert the Base64 to Text to find the corresponding code (to avoid replacing all _CRS and _STA to XCRS and XSTA) but obtained some unwanted characters in it like this :

{DSYN�ñ�ñ
_CRS�ñäSBFBSBFI�"

Could you please help me find how to replace the corresponding _STA and _CRS ? I tried using BaseSkip and Count without any luck and ended renaming all _STA and _CRS methods to give it a try.

After that still can't see the _CRS and _STA methods from the modified SSDT-GPIO (attached to this post) on system DSDT (MaciASL). I don't know how to get this to work correctly.

I also tried adding the SSDT-I2CD.dsl (compiled to .aml) to obtain more debug without any subdevices showing in IOReg.

I honestly don't know what to do now...
 

Attachments

  • SSDT-GPI0-3.aml
    239 bytes · Views: 41
Hi thanks for your answer,
I am using those boot args to help debugging the SMCBatteryManager issue, I will remove them when I'm done with the battery issue. I am forcing polling mode using the -vi2c-force-polling boot arg.

I can't find how to properly replace the corresponding strings in my DSDT, I tried to convert the Base64 to Text to find the corresponding code (to avoid replacing all _CRS and _STA to XCRS and XSTA) but obtained some unwanted characters in it like this :

{DSYN�ñ�ñ
_CRS�ñäSBFBSBFI�"

Could you please help me find how to replace the corresponding _STA and _CRS ? I tried using BaseSkip and Count without any luck and ended renaming all _STA and _CRS methods to give it a try.

After that still can't see the _CRS and _STA methods from the modified SSDT-GPIO (attached to this post) on system DSDT (MaciASL). I don't know how to get this to work correctly.

I also tried adding the SSDT-I2CD.dsl (compiled to .aml) to obtain more debug without any subdevices showing in IOReg.

I honestly don't know what to do now...
well, you need to remove -vi2c-force-polling boot argument as that has nothing to do with your battery and will try and force polling mode....

you can use the echo command in terminal as per the example here:
https://www.tonymacx86.com/threads/guide-using-clover-to-hotpatch-acpi.200137/post-1308258

Code:
u430:~ RehabMan$ echo -n GFX0|xxd
0000000: 4746 5830                                GFX0
u430:~ RehabMan$ echo -n IGPU|xxd
0000000: 4947 5055                                IGPU
 
well, you need to remove -vi2c-force-polling boot argument as that has nothing to do with your battery and will try and force polling mode....

you can use the echo command in terminal as per the example here:
https://www.tonymacx86.com/threads/guide-using-clover-to-hotpatch-acpi.200137/post-1308258

Code:
u430:~ RehabMan$ echo -n GFX0|xxd
0000000: 4746 5830                                GFX0
u430:~ RehabMan$ echo -n IGPU|xxd
0000000: 4947 5055                                IGPU
I think there is a misunderstanding about the -vi2c-force-polling, I am using it only because the touchpad doesn't work in interrupt mode. It is for my everyday use to have a it "working in "safe mode"". I always remove it before testing interrupt mode ! I was talking about the other Lilu/VSMC-related boot args for the Battery.

Thanks for the guide, I managed to properly rename the corresponding _STA and _CRS.

However my Touchpad is still "detected but not working" in interrupt mode... Here is the IOReg in case you want to take a look at it :
 

Attachments

  • IORegInterrupt.zip
    829.7 KB · Views: 43
I think there is a misunderstanding about the -vi2c-force-polling, I am using it only because the touchpad doesn't work in interrupt mode. It is for my everyday use to have a it "working in "safe mode"". I always remove it before testing interrupt mode ! I was talking about the other Lilu/VSMC-related boot args for the Battery.

Thanks for the guide, I managed to properly rename the corresponding _STA and _CRS.

However my Touchpad is still "detected but not working" in interrupt mode... Here is the IOReg in case you want to take a look at it :
will probably need to see your new zipped EFI as well
 
will probably need to see your new zipped EFI as well
Here is my new EFI (cleaned some boot args, re-arranged the kext order, added SSDT and removed old renames-trials) :)

EDIT: Upload seems to have failed, sorry, here it is :
 

Attachments

  • EFI 3.zip
    50.1 MB · Views: 64
Last edited:
Here is my new EFI (cleaned some boot args, re-arranged the kext order, added SSDT and removed old renames-trials) :)

EDIT: Upload seems to have failed, sorry, here it is :
not sure that you need to have 2 SSDTs for your trackpad

do you have working battery on your hack? as this is required to be working fully before attempting to make your trackpad working

also test by enabling VoodooInput.kext from VoodooPS2Controller.kext

only boot argument you probably only need is igfxonln=1

also go back and check your kext ordering properly
 
not sure that you need to have 2 SSDTs for your trackpad

The other one is for debugging I2C constants : https://github.com/VoodooI2C/VoodooI2C/blob/master/Documentation/SSDT-I2CD.dsl

do you have working battery on your hack? as this is required to be working fully before attempting to make your trackpad working

The battery is working with ACPIBatteryManager.

also test by enabling VoodooInput.kext from VoodooPS2Controller.kext

Already tried with the exact same result

only boot argument you probably only need is igfxonln=1

also go back and check your kext ordering properly

Well, maybe I could remove some boot-args, but there is certainly much more needed than igfxonln=1. I don't understand what this has to do with VoodooI2C ?
 
The other one is for debugging I2C constants : https://github.com/VoodooI2C/VoodooI2C/blob/master/Documentation/SSDT-I2CD.dsl



The battery is working with ACPIBatteryManager.



Already tried with the exact same result



Well, maybe I could remove some boot-args, but there is certainly much more needed than igfxonln=1. I don't understand what this has to do with VoodooI2C ?
probably not much, but no need to throw in all kind of random boot arguments you can find, sometimes less is more when it comes to hackintoshing

also you could look into VoodooRMI

I tested with my setup for I2C and it seems to work fine with no extra aml or Find and Replace entry in config.plist

EDIT:
not sure how you managed to get working battery status with only ACPIBatteryManager.kext with no extra aml file....?
 
Back
Top