Contribute
Register

VoodooI2C Help and Support

Status
Not open for further replies.
@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:
@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.

What is your APIC number for the trackpad?
It seems that your question is much more complicated than I thought.
 
It seems that your question is much more complicated than I thought.
This is the problem in my case (from Linux on this laptop)
pin 74 (UART2_CTSB) 87:INT3450:00 GPIO 0x80900102 0x0000005f 0x00000000 [LOCKED full, ACPI]
While it is configured for GPIO, that pin is locked in ACPI mode by BIOS. So Voodoo gives up without registering on that pin. Unfortunately, this seems to be the only pin on which the trackpad sends its interrupts for GPIO pinning. I tried disabling the APIC check in Voodoo and force registration as this seems to have worked in Linux for some trackpads in the past but still don't get interrupts.

Linux works with this trackpad OOB, so there must be a workaround with the latest pin control code that may not have made it to VoodooGPIO.

So this is a bios problem rather than a goodix trackpad problem.

Can you please post your entire ETPD section in your DSDT? Want to see if my DSDT does something different. Thanks.
 
Last edited:
This is the problem in my case (from Linux on this laptop)

While it is configured for GPIO, that pin is locked by BIOS. So Voodoo gives up without registering on that pin. Unfortunately, this seems to be the only pin on which the trackpad sends its interrupts for GPIO pinning. I tried disabling the APIC check in Voodoo and force registration as this seems to have worked in Linux for some trackpads in the past but still don't get interrupts.

Linux works with this trackpad OOB, so there must be a workaround with the latest pin control code that may not have made it to VoodooGPIO.

So this is a bios problem rather than a goodix trackpad problem.

Can you please post your entire ETPD section in your DSDT? Want to see if my DSDT does something different. Thanks.
this is my original DSDT file
 

Attachments

  • DSDT.aml
    257.3 KB · Views: 57
this is my original DSDT file
please update your hardware profile to allow others to help you easier

please read the faq for proper hardware profile setup:
 
this is my original DSDT file
Thanks. No much different other than setting an addr in _Y38 for the serial bus specification in mine that isn't in yours. Removing that makes no difference.

How did you arrive at 0x6D as your GPIO pin starting from the 0x51 in your interrupt specifiers? Formula or trial and error?
 
Thanks. No much different other than setting an addr in _Y38 for the serial bus specification in mine that isn't in yours. Removing that makes no difference.

How did you arrive at 0x6D as your GPIO pin starting from the 0x51 in your interrupt specifiers? Formula or trial and error?
just list the one laptop system please:
please read the faq for proper hardware profile setup:
 
Thanks. No much different other than setting an addr in _Y38 for the serial bus specification in mine that isn't in yours. Removing that makes no difference.

How did you arrive at 0x6D as your GPIO pin starting from the 0x51 in your interrupt specifiers? Formula or trial and error?
I think @sqlsec's trackpad has ACIP interrupt of 0x6d and used the calculation below:

If APICPIN > 47 And APICPIN <= 71 Then
GPIOPIN = APICPIN - 16
GPIOPIN2 = APICPIN + 80
ElseIf APICPIN > 71 And APICPIN <= 95 Then
GPIOPIN2 = APICPIN + 184
GPIOPIN = APICPIN + 88
ElseIf APICPIN > 95 And APICPIN <= 119 Then
GPIOPIN = APICPIN
ElseIf APICPIN > 108 And APICPIN <= 115 Then
GPIOPIN2 = APICPIN - 44
End If

@Feartech Did you delete my post?
 
I think @sqlsec's trackpad has ACIP interrupt of 0x6d and used the calculation below:

If APICPIN > 47 And APICPIN <= 71 Then
GPIOPIN = APICPIN - 16
GPIOPIN2 = APICPIN + 80
ElseIf APICPIN > 71 And APICPIN <= 95 Then
GPIOPIN2 = APICPIN + 184
GPIOPIN = APICPIN + 88
ElseIf APICPIN > 95 And APICPIN <= 119 Then
GPIOPIN = APICPIN
ElseIf APICPIN > 108 And APICPIN <= 115 Then
GPIOPIN2 = APICPIN - 44
End If

@Feartech Did you delete my post?

According to the DSDT posted earlier, his laptop has APIC interrupt of 0x51. The above formula would then require 265 or 169 neither of which are 0x6D. My guess is that the latter is an incorrect pin that has fallen back to polling silently like in your case.
 
I tried to use kextload to check the dmesg log. However it looks like there some errors to load the kexts directly. Any idea how this could be?


Code:
username@MBP VoodooI2C-old % sudo kextload -v VoodooI2C*

Executing: /usr/bin/kmutil load -p /Users/username/Downloads/VoodooI2C-old/VoodooI2C.kext -p /Users/username/Downloads/VoodooI2C-old/VoodooI2CHID.kext
Error Domain=KMErrorDomain Code=31 "Error occurred while building a collection:
    1: One or more binaries has an error which prevented linking.  See other errors.
    2: Could not use 'com.alexandred.VoodooI2C' because: Failed to bind '__ZN10VoodooGPIO9metaClassE' as could not find a kext with 'org.coolstar.VoodooGPIO' bundle-id
    3: Could not use 'com.alexandred.VoodooI2CHID' because: Failed to bind '__ZN11IOHIDDevice22_RESERVEDIOHIDDevice12Ev' as could not find a kext with 'org.coolstar.VoodooGPIO' bundle-id
com.alexandred.VoodooI2C specific:
    1: Failed to bind '__ZN10VoodooGPIO9metaClassE' as could not find a kext with 'org.coolstar.VoodooGPIO' bundle-id
com.alexandred.VoodooI2CHID specific:
    1: Failed to bind '__ZN11IOHIDDevice22_RESERVEDIOHIDDevice12Ev' as could not find a kext with 'org.coolstar.VoodooGPIO' bundle-id
" UserInfo={NSLocalizedDescription=Error occurred while building a collection:
    1: One or more binaries has an error which prevented linking.  See other errors.
    2: Could not use 'com.alexandred.VoodooI2C' because: Failed to bind '__ZN10VoodooGPIO9metaClassE' as could not find a kext with 'org.coolstar.VoodooGPIO' bundle-id
    3: Could not use 'com.alexandred.VoodooI2CHID' because: Failed to bind '__ZN11IOHIDDevice22_RESERVEDIOHIDDevice12Ev' as could not find a kext with 'org.coolstar.VoodooGPIO' bundle-id
com.alexandred.VoodooI2C specific:
    1: Failed to bind '__ZN10VoodooGPIO9metaClassE' as could not find a kext with 'org.coolstar.VoodooGPIO' bundle-id
com.alexandred.VoodooI2CHID specific:
    1: Failed to bind '__ZN11IOHIDDevice22_RESERVEDIOHIDDevice12Ev' as could not find a kext with 'org.coolstar.VoodooGPIO' bundle-id
}
 
Last edited:
Status
Not open for further replies.
Back
Top