Contribute
Register

VoodooI2C Help and Support

Status
Not open for further replies.
Hi
I'm using a Dell Latitude 7400 which is working almost perfectly except the TouchPad.
When using Voodoo PS2, the TouchPad works as a mouse, buttons are functional, drag & drop OK but unfortunately not the 2 or 3 finger gestures
I've tried then to test HID and follow the guide https://voodooi2c.github.io
using SSDT patching
{
External (GPHD, FieldUnitObj)

Scope (\)
{
If (_OSI ("Darwin"))
{
GPHD = 0x0F
}
Else
{
}
}
}
The TouchPad is now functional with 2/3 finger gestures, scrolling OK..but unfortunately not the drag & drop or buttons.
is there any idea to improve this.? did I miss anything?
thanks
Screenshot 2020-12-06 at 18.34.15.png
 
@ben9923

I've been experimenting with booting my laptop with OpenCore (0.6.6) rather than Clover (r5107).

Everything is working except for VoodooI2C my HP laptop has a TouchScreen and Active Stylus that work fine when booting the laptop with Clover (r5107) but so far I have been unsuccessful in getting VoodooI2C to work when booting with OpenCore ... full specs for my Laptop are in my sig.

I am using the same patched DSDT with OpenCore that I use with Clover, the only change that was relevant to VoodooI2C was to the return in the _CRS method of the TPL0 device :-

Code:
Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
            {
                 Return (ConcatenateResTemplate (SBFB, SBFG))
            }

With this change VoodooI2C has always worked when booted with Clover, there was no need to change anything with the GPIO.

I can tell that VoodooI2C and its satellites are loading as searching for "voodooi2c" in IORegistryExplorer shows that the kext's have loaded and attached to the I2C device :-

Here is a IOREG when booted with Clover (VoodooI2C working) - Catalina 10.15.7
Clover Voodooi2c.png

And here is a IOREG when booted with OpenCore (VoodooI2C not working) - Big Sur 11.2.1
OpenCore VoodooI2c.png

As you can see they are the same.

I've ensured that the VoodooI2C kexts are loaded in the correct order in the OpenCore config.plist
OPenCore-Config-kexts-add.png

As you can see I am loading the standalone version of VoodooInput before VoodooI2C and have disabled the bundled VoodooInput in both VoodooI2C and VoodooPS2Controller, but I have also tried with the bundled version enabled but that also did not help, all kexts are the latest version.

I have tried adding SSDT-GPIO to my injected ACPI SSDT's when booting with OpenCore (I don't use it when booting with Clover) but this does not help if its injected or not.

I'm kind of at a loss to understand why its not working as its worked so well in the past when booted with Clover ?
Would appreciate any thoughts you might have on how to further debug the issue.

Appreciate all the work you and Alex do with VoodooI2C for the community.

Cheers
Jay
 
@ben9923

I've been experimenting with booting my laptop with OpenCore (0.6.6) rather than Clover (r5107).

Everything is working except for VoodooI2C my HP laptop has a TouchScreen and Active Stylus that work fine when booting the laptop with Clover (r5107) but so far I have been unsuccessful in getting VoodooI2C to work when booting with OpenCore ... full specs for my Laptop are in my sig.

I am using the same patched DSDT with OpenCore that I use with Clover, the only change that was relevant to VoodooI2C was to the return in the _CRS method of the TPL0 device :-

Code:
Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
            {
                 Return (ConcatenateResTemplate (SBFB, SBFG))
            }

With this change VoodooI2C has always worked when booted with Clover, there was no need to change anything with the GPIO.

I can tell that VoodooI2C and its satellites are loading as searching for "voodooi2c" in IORegistryExplorer shows that the kext's have loaded and attached to the I2C device :-

Here is a IOREG when booted with Clover (VoodooI2C working) - Catalina 10.15.7
View attachment 508955
And here is a IOREG when booted with OpenCore (VoodooI2C not working) - Big Sur 11.2.1
View attachment 508956
As you can see they are the same.

I've ensured that the VoodooI2C kexts are loaded in the correct order in the OpenCore config.plist
View attachment 508957
As you can see I am loading the standalone version of VoodooInput before VoodooI2C and have disabled the bundled VoodooInput in both VoodooI2C and VoodooPS2Controller, but I have also tried with the bundled version enabled but that also did not help, all kexts are the latest version.

I have tried adding SSDT-GPIO to my injected ACPI SSDT's when booting with OpenCore (I don't use it when booting with Clover) but this does not help if its injected or not.

I'm kind of at a loss to understand why its not working as its worked so well in the past when booted with Clover ?
Would appreciate any thoughts you might have on how to further debug the issue.

Appreciate all the work you and Alex do with VoodooI2C for the community.

Cheers
Jay
Detailed and clear as always, thanks for the report :)

Can you please attach a troubleshooting archive? ACPI, IOReg, logs, etc.
Make sure you also include the original DSDT.

As recent versions of macOS make our logs disappear, please also inject DebugEnhancer.kext and attach the output of the dmesg command to retrieve your kernel logs.

You probably already plan on migrating the patched DSDT into a set of hotpathes, just note using a patched DSDT that's out-of-sync with the OEM one may cause plenty of issues like this one. OpenCore may be more sensitive to those :p

Thanks for your many contributions, too!
 
You probably already plan on migrating the patched DSDT into a set of hotpathes, just note using a patched DSDT that's out-of-sync with the OEM one may cause plenty of issues like this one. OpenCore may be more sensitive to those :p

@ben9923,

Yes it's on my to do list .... have got most of the simple DSDT edits converted to Hot Patch SSDT's but having problems with the battery patching ... DSDT patch uses RehabMans HP-G6-2221 MaciASL patch :-


But converting it to a SSDT is proving difficult ... ACPI coding is not my strongest, but i get there eventually :).

FYI: Some info on how i went about getting VoodooI2C originally working is in this thread :-


That was a long time ago but the device names .. etc all all correct.

Can you confirm if SSDT-GPIO is required with opencore ? ... Voodooi2c works fine when booted with clover without SSDT-GPIO.

Thanks for taking a look, let me know if you need any more info.

Cheers
Jay
 
Last edited:
@ben9923,

Debug Archive attached .... I think i included everything but if anything is missing please let me know.
As requested I added the DebugEnhancer.kext and include output of sudo dmesg.



Yes it's on my to do list .... have got most of the simple DSDT edits converted to Hot Patch SSDT's but having problems with the battery patching ... DSDT patch uses RehabMans HP-G6-2221 MaciASL patch :-


But converting it to a SSDT is proving difficult ... ACPI coding is not my strongest, but i get there eventually :).

FYI: Some info on how i went about getting VoodooI2C originally working is in this thread :-


That was a long time ago but the device names .. etc all all correct.

Thanks for taking a look, let me know if you need any more info.

Cheers
Jay
Have a look at the kernel logs, especially those lines:
Code:
[    1.282789]: VoodooGPIOSunrisePointLP::Registering hardware pin 0x6B for GPIO IRQ pin 0x6B
[    1.282792]: VoodooGPIOSunrisePointLP::Successfully registered hardware pin 0x6B for GPIO IRQ pin 0x6B
[    1.282822]: VoodooGPIOSunrisePointLP:: pin 107 cannot be used as IRQ

As the pin cannot be used for interrupts, touchscreen isn't working for you.

You can see this code in your device's _INI method:
C-like:
                If ((SDM1 == Zero))
                {
                    SHPO (GPLI, One)
                }
SHPO enables GPIO interrupts for a pin.

You can see the same control variable in your original _CRS method:
C-like:
                If ((SDM1 == Zero))
                {
                    Return (ConcatenateResTemplate (SBFB, SBFG))
                }

So basically, giving the SDM1 variable the value of Zero will make your device work in GPIO mode without the need of patching the device methods themselves.

You can accomplish that by adding an SSDT that changes the value in _SB._INI, like SSDT-AWAC does for STAS:

You can see there's also an OS version check in original _CRS. As your OS patch is disabled, you can add one specifically to your device's scope, i.e.
Code:
Scope (\_SB.PCI0.I2C0.TPL0) {
    If (_OSI ("Darwin")) {
        Name (OSYS, 0x07DF)
    }
}

Then you can just revert the patch you've done to _CRS and keep it native.
Make sure you remove SSDT-GPIO. It's messing with SBRG and will break your GPIO device.
 
@ben9923,

I did see that line in the log :-

Code:
VoodooGPIOSunrisePointLP:: pin 107 cannot be used as IRQ

And wondered if that was the issue ... many thanks for taking a look.
I created a hot patch with the following code :-

Code:
DefinitionBlock ("", "SSDT", 2, "HACK", "SDM1", 0x00000000)
{
    External (_SB_.PCI0.I2C0.TPL0, DeviceObj)
    External (SDM1, IntObj)

    Scope (_SB)
    {
        Method (_INI, 0, NotSerialized)  // _INI: Initialize
        {
            If (_OSI ("Darwin"))
            {
                SDM1 = Zero
            }
        }
    }

    Scope (\_SB.PCI0.I2C0.TPL0)
    {
        If (_OSI ("Darwin"))
        {
            Name (OSYS, 0x07DF)
        }
    }
}

And bang the touch screen and active stylus is now working (also removed SSDT-GPIO as you suggested).
The only other question I have is why did it work without this when booted with clover ?

Thanks again for taking a look and your help in solving the issue.

Cheers
Jay
 
Last edited:
@ben9923,

I did see that line in the log :-

Code:
VoodooGPIOSunrisePointLP:: pin 107 cannot be used as IRQ

And wondered if that was the issue ... many thanks for taking a look.
I created a hot patch with the following code :-

Code:
DefinitionBlock ("", "SSDT", 2, "HACK", "SDM1", 0x00000000)
{
    External (_SB_.PCI0.I2C0.TPL0, DeviceObj)
    External (SDM1, IntObj)

    Scope (_SB)
    {
        Method (_INI, 0, NotSerialized)  // _INI: Initialize
        {
            If (_OSI ("Darwin"))
            {
                SDM1 = Zero
            }
        }
    }

    Scope (\_SB.PCI0.I2C0.TPL0)
    {
        If (_OSI ("Darwin"))
        {
            Name (OSYS, 0x07DF)
        }
    }
}

And bang the touch screen is now working (also removed SSDT-GPIO as you suggested).
The only other question I have is why did it work without this when booted with clover ?

Thanks again for taking a look and your help in solving the issue.

Cheers
Jay

SSDT looks good (though I might change its name). Make sure you also un-patch _CRS ;)

I really can't tell why it worked in Clover. If you really want to investigate that, start by checking the native value of SDM1 when using it (in theory it should match the one seen when using OpenCore, but IDK...). SSDT-I2CD in the VoodooI2C repo can make it appear in IOReg.
I guess you are sure it was using GPIO when booting Clover, so it's probably not that.

Glad it works, happy I can help!
-Ben
 
I need some help with my touchpad and Big Sur. With Catalina and OC I just need the SSDT-XOSI, the _OSI to XOSI patch and rebuild kextcache or inject IOGraphicsFamily kext on boot. With Big Sur I can't get it to work: if I inject IOGraphicsFamily on boot I got a kernel panic and if I try kmutil to rebuild kextcache I got a missing dependency.
The laptop is an Acer Swift3 SF-314-52 and the touchpad is an ELAN0501

EDIT: solved
 

Attachments

  • panic.txt
    3.9 KB · Views: 58
  • cache_rebuild.txt
    1 KB · Views: 53
  • ioreg.ioreg
    4 MB · Views: 58
  • EFI.zip
    24.9 MB · Views: 72
Last edited:
Heya, my rig is an ASUS Zenbook PRO UX580GE (I have a thread for this one and there are some of my EFI configs used while I configured it) and is not compatible with yours in many regards, but lets see how can we get your trackpad to work (the screenpad is in most configs linked with the discrete GPU and that will not work).
To help you I need to know how did you patched your system - did you patched the DSDT or did you used the hot-patch method ?
If you went with hot-patch method then you can use GenI2C tool (https://github.com/williambj1/GenI2C) to generate the 2 SSDT files that will get you started.
Hello bro... One year after; I'm getting the same problem... I've tried everything for a week now.
I've got a UX450FD with screen pad and it's absolutely horrible to make it works.
I've removed all the Touchscreen stuff in info.plist and tried to SSDT-GPI0 patch but nothing works.
I don't understand how could we GPIO pin in opencore too... So sorry to bother you.
Could you try to help me please ? Cheers
 
Hello bro... One year after; I'm getting the same problem... I've tried everything for a week now.
I've got a UX450FD with screen pad and it's absolutely horrible to make it works.
I've removed all the Touchscreen stuff in info.plist and tried to SSDT-GPI0 patch but nothing works.
I don't understand how could we GPIO pin in opencore too... So sorry to bother you.
Could you try to help me please ? Cheers
 
Status
Not open for further replies.
Back
Top