Contribute
Register

VoodooI2C Help and Support

Status
Not open for further replies.
Load the SSDT and install VoodooI2C and VoodooI2CHID. Reboot and look at ioreg under PCI0.I2C0 is VoodooI2C loaded.
Also under PCI0.GPI0 should have voodoo.
Show us the output of sudo dmesg | grep -i voodoo, you would need DebugEnhancer kext to dmesg to show the logs from Voodoo.
Also see if the SSDT is loaded correctly, without any errors
[ 3.538243]: VoodooGPIOCannonLakeH::Loading GPIO Data for CannonLake-H
[ 3.538250]: VoodooGPIOCannonLakeH::VoodooGPIO Init!
[ 3.538251]: VoodooGPIOCannonLakeH::VoodooGPIO Initializing Community 0
[ 3.538329]: VoodooGPIOCannonLakeH::VoodooGPIO Initializing Community 1
[ 3.538405]: VoodooGPIOCannonLakeH::VoodooGPIO Initializing Community 2
[ 3.538481]: VoodooGPIOCannonLakeH::VoodooGPIO Initializing Community 3
[ 3.538599]: VoodooGPIOCannonLakeH::GPIO Controller is already awake! Not reinitializing.
 

Attachments

  • opencore-2021-10-13-150716.txt
    256 KB · Views: 89
Last edited:
I am trying to get the ASUS screenpad (in ZenBook Pro UX535li) working as a trackpad using VoodooI2c. The CPU is i7-10750H. It has a touch screen and a trackpad that also has a secondary screen. Both come up as I2C HID devices in Windows.

Installed latest debug versions of VoodooI2c.kext and VoodooI2CHID.kext.

Out of the box with no patches or any SSDT related to this, the touchscreen works perfectly with all multi-finger gestures. The device is seen as TPL0 (Elan 9008) and it has an interrupt below 2f and so works under APIC.

The screenpad comes as device ETPD (GDX1515) in ioregistry. It has an interrupt above 2f and so the logs say polling will be used. But it is not responding to ANY input on the screenpad. No mouse emulation, no single finger actions, nothing.

The IORegistry shows both devices have the exact same hierarchy of drivers attached. See screenshots. So the device is being detected and correct drivers attached. But touch screen responds, the screenpad does not. I just want to get it working under polling for now. So no GPIO pinning/patching done. GPIO is certainly loaded and Voodoo attached to it just as additional info.

The log (I have Debug enhancer kext) does not show any detailed logs. Whatever it shows seems normal for the screenpad device
kernel: (VoodooI2C) VoodooI2CControllerDriver::pci8086,6e9 Found I2C device: GDX1515

2021-11-06 15:36:43.936516-0700 0x11a Default 0x0 0 0 kernel: (VoodooI2C) VoodooI2CControllerDriver::pci8086,6ea Got bus configuration values
2021-11-06 15:36:43.936518-0700 0x118 Default 0x0 0 0 kernel: (VoodooI2C) VoodooI2CDeviceNub::ETPD Warning: Incompatible APIC interrupt pin (0x5f > 0x2f)
2021-11-06 15:36:43.936556-0700 0x118 Default 0x0 0 0 kernel: (VoodooI2C) VoodooI2CDeviceNub::ETPD TP7G index 0x0 is not supported
2021-11-06 15:36:43.936559-0700 0x118 Default 0x0 0 0 kernel: (VoodooI2C) VoodooI2CDeviceNub::ETPD Could not retrieve interrupts from _DSM or XDSM method
2021-11-06 15:36:43.936562-0700 0x118 Default 0x0 0 0 kernel: (VoodooI2C) VoodooI2CDeviceNub::ETPD Warning: Could not find any APIC nor GPIO interrupts. Your chosen satellite will run in polling mode if implemented.
I am not sure about the TP7G message. There is no such symbol in DSDT for this laptop.

As suggested in a VoodooI2C forum, I removed the VoodooI2CHIDDevice Multitouch HID Event Driver section in the Info plist in VoodooI2CHID.kext. This makes the screenpad work as a mouse with a single finger so the device is working under mouse emulation. But this change screws up the touch screen which also becomes a single finger mouse emulator which is useless.

Before I even get into multi-touch in the Screenpad, I just want to get to the stage of using it as a single finger mouse with clicks but have multi-touch with gestures available on the main screen. So, the above solution won't work for me.

What should I be looking at or enabling/disabling to understand why the trackpad HID driver isn't getting finger inputs via polling for this screenpad?

I am not sure which documents or logs in entirety if any would be useful to upload for this specific debugging since the drivers seem to be loading fine and the touch screen is working perfectly (but under APIC).

The first image is the ioregistry entry for the screen pad that is not responding and the second one for the touch screen that is working perfectly.

Thanks for any help/pointers.

Screen Shot 2021-11-06 at 3.06.40 PM.png


Screen Shot 2021-11-06 at 3.25.26 PM.png
 
Last edited:
Coincidentally, my laptop is also considered as a screenpad. He uses a GDX1515 touchpad.


However, I read various materials and found that this touchpad could not work normally in history. It can only be touched by one finger at most. Follow This problem has been around for a long time, I hope there is a great god who can solve this thorny problem
 
I am trying to get the ASUS screenpad (in ZenBook Pro UX535li) working as a trackpad using VoodooI2c. The CPU is i7-10750H. It has a touch screen and a trackpad that also has a secondary screen. Both come up as I2C HID devices in Windows.

Installed latest debug versions of VoodooI2c.kext and VoodooI2CHID.kext.

Out of the box with no patches or any SSDT related to this, the touchscreen works perfectly with all multi-finger gestures. The device is seen as TPL0 (Elan 9008) and it has an interrupt below 2f and so works under APIC.

The screenpad comes as device ETPD (GDX1515) in ioregistry. It has an interrupt above 2f and so the logs say polling will be used. But it is not responding to ANY input on the screenpad. No mouse emulation, no single finger actions, nothing.

The IORegistry shows both devices have the exact same hierarchy of drivers attached. See screenshots. So the device is being detected and correct drivers attached. But touch screen responds, the screenpad does not. I just want to get it working under polling for now. So no GPIO pinning/patching done. GPIO is certainly loaded and Voodoo attached to it just as additional info.

The log (I have Debug enhancer kext) does not show any detailed logs. Whatever it shows seems normal for the screenpad device

I am not sure about the TP7G message. There is no such symbol in DSDT for this laptop.

As suggested in a VoodooI2C forum, I removed the VoodooI2CHIDDevice Multitouch HID Event Driver section in the Info plist in VoodooI2CHID.kext. This makes the screenpad work as a mouse with a single finger so the device is working under mouse emulation. But this change screws up the touch screen which also becomes a single finger mouse emulator which is useless.

Before I even get into multi-touch in the Screenpad, I just want to get to the stage of using it as a single finger mouse with clicks but have multi-touch with gestures available on the main screen. So, the above solution won't work for me.

What should I be looking at or enabling/disabling to understand why the trackpad HID driver isn't getting finger inputs via polling for this screenpad?

I am not sure which documents or logs in entirety if any would be useful to upload for this specific debugging since the drivers seem to be loading fine and the touch screen is working perfectly (but under APIC).

The first image is the ioregistry entry for the screen pad that is not responding and the second one for the touch screen that is working perfectly.

Thanks for any help/pointers.

View attachment 533484

View attachment 533485
Coincidentally, my laptop is also considered as a screenpad. He uses a GDX1515 touchpad. I hope there is a great god who can solve this thorny problem
 
Linux people seem to have solved this problem and Windows works fine so a programmable solution exists.

I am trying to understand if this is a configuration/installation problem or a current limitation/bug of Voodoo kexts.

I will be happy if I can get a single finger mouse functionality on the screenpad for cursor movement and clicks along with multi-finger touch on main screen OR multi-finger gestures on trackpad with touch screen can even dead for touch. I don't know if people who are reporting single finger success on screenpad are compromising the multi-touch on main screen (or they don't have touch on main screen).

As I wrote earlier, I can get mouse emulation on the screenpad by removing the multi-touch section in the kext. But that does screw up the working multi-finger gestures on main screen, so essentially no multi-finger on either. That is a crippled solution.
 
Linux people seem to have solved this problem and Windows works fine so a programmable solution exists.

I am trying to understand if this is a configuration/installation problem or a current limitation/bug of Voodoo kexts.

I will be happy if I can get a single finger mouse functionality on the screenpad for cursor movement and clicks along with multi-finger touch on main screen OR multi-finger gestures on trackpad with touch screen can even dead for touch. I don't know if people who are reporting single finger success on screenpad are compromising the multi-touch on main screen (or they don't have touch on main screen).

As I wrote earlier, I can get mouse emulation on the screenpad by removing the multi-touch section in the kext. But that does screw up the working multi-finger gestures on main screen, so essentially no multi-finger on either. That is a crippled solution.
Thank you for your ideas. I found this discussion about this trackpad in the Linux community at: https://bugzilla.kernel.org/show_bug.cgi?id=204991

According to this idea, I tried to use Xcode to compile the project myself. I feel that the main code is in this file https://github.com/VoodooI2C/Voodoo.../VoodooI2CPrecisionTouchpadHIDEventDriver.cpp

I tried to increase the IOSleep delay before entering the enterPrecisionTouchpadMode() function. I was too weak. I added several IOSleep, but it didn’t seem to be successful. Is it a problem with my operation? Is it still missing the reason for SET_OR_SEND_REPORT?
 
@sqlsec, as I responded in the Voodoo Git forum, the delay solution has been superceded in Linux by simply disabling real time power management for Goodix devices.

Not sure Voodoo developers have much time to address our issues, so we may be on our own to develop a separate Elan/Synaptics like Satellite for Goodix borrowing from Linux driver code.

Can you please take a look and see if you can reliably find a way to insert debug messages via IOLog in the Voodoo code that you can see post-boot? For example, a message that it executes the VoodooI2CPrecisionTouchpadHIDEventDriver::enterPrecisionTouchpadMode(). I am trying to put a message near power on and on the above method to see if they are close (in timestamps) assuming the above method is even executed. But for some reason, most IOLog statements I insert aren't shown in dmesg. The only thing there is a continuous sequence of keyPressed items even when one isn't touching the trackpad.

Once we have verified the timing above and the ability to log anywhere in the code, we can check whether the trackpad is sending reports as a legacy mouse.
 
For those that may have stumbled onto this thread via web search for a problem with their trackpads or touchpads which only do single finger and no multi-touch, I have found the problem with the current code in VoodooI2CHID for which there is an easy fix. The details and fix can be found at


This fix should make it into a future release of VoodooI2C. This makes the infamous Goodix GDX1515 Screenpad on ASUS laptops work properly as a trackpad with multi-touch. But the fix also applies to any trackpad or touch screen that can work in both touch screen and trackpad modes (like for example, the second screen in Zenbook Duos). The fix restores multi-touch for all such devices.
 
For those that may have stumbled onto this thread via web search for a problem with their trackpads or touchpads which only do single finger and no multi-touch, I have found the problem with the current code in VoodooI2CHID for which there is an easy fix. The details and fix can be found at


This fix should make it into a future release of VoodooI2C. This makes the infamous Goodix GDX1515 Screenpad on ASUS laptops work properly as a trackpad with multi-touch. But the fix also applies to any trackpad or touch screen that can work in both touch screen and trackpad modes (like for example, the second screen in Zenbook Duos). The fix restores multi-touch for all such devices.
CannolLake H CPU can try the following formula to calculate GPIO Pin

Code:
If APICPIN > 47 And APICPIN <= 71 Then   
    GPIOPIN = APICPIN - 16   
    GPIOPIN2 = APICPIN + 240
    If APICPIN > 47 And APICPIN <= 59 Then GPIOPIN3 = APICPIN + 304 
ElseIf APICPIN > 71 And APICPIN <= 95 Then
    GPIOPIN = APICPIN - 8   
    GPIOPIN3 = APICPIN + 152
    GPIOPIN2 = APICPIN + 120
ElseIf APICPIN > 95 And APICPIN <= 119 Then
    GPIOPIN = APICPIN       
If APICPIN > 108 And APICPIN <= 115 Then
      GPIOPIN2 = APICPIN + 20
End If
 
@sqlsec, That is the same calculation as the tables in the pinning guide arrives at. I have tried all the three for my APIC interrupt specifier of 0x5F (95) for which the calculations yield 87 (0x57), 247 (0xF7) and 215 (0xD7). None of them work in that the trackpad is unresponsive. For the last two, the interrupt registration happens fine (as shown in IO Registry) but no interrupts arrive. For the first one, there is an error message in the logs "Pin 74 (0x4A) cannot be used as IRQ". 74 is the calculated hardware pin for GPIO pin 87.

The possible explanation is that the BIOS has specified APIC as the owner for that pin (74) and may have even locked it. VoodooI2C will not register for interrupts in such a case and throws that error message.

Linux people have found same ownership/locked issue in a few trackpads. Not sure they have solved that problem.
(https://bugzilla.kernel.org/show_bug.cgi?id=199911)

What is your APIC number for the trackpad?
 
Last edited:
Status
Not open for further replies.
Back
Top