Contribute
Register

VoodooI2C Help and Support

Status
Not open for further replies.
@shiecldk,

DSDT is unique to each laptop .. everything will be completely different to your laptop it won't help at all.
I'm booting with OpenCore 0.7.2 and not injecting custom DSDT anymore ..

Code for my SDDT is this :-

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)
        }
    }
}

But again it will be unique to my laptop .. I doubt that the same device is called the same in your DSDT.

Cheers
Jay
Thank you! Could I see your DSDT to compare with mine? Hoping to see how your DSDT in I2C0.TPL0 device is different from mine.
 
Thank you! Could I see your DSDT to compare with mine? Hoping to see how your DSDT in I2C0.TPL0 device is different from mine.

@shiecldk,

Here you go ... copy of native DSDT for HP Spectre X360

Cheers
Jay
 

Attachments

  • DSDT.aml.zip
    56.7 KB · Views: 61
@shiecldk,

Here you go ... copy of native DSDT for HP Spectre X360

Cheers
Jay
Thanks. I also read your topic in

Wonder if you could possiblily help me look into my DSDT for the touchscreen and stylus? I found my code is a bit different from yours.

Code:
Scope (_SB.PCI0.I2C2)
    {
        Device (TPL0)
        {
            Name (_CID, "PNP0C50" /* HID Protocol Device (I2C bus) */)  // _CID: Compatible ID
            Name (_UID, One)  // _UID: Unique ID
            Name (_S0W, 0x03)  // _S0W: S0 Device Wake State
            Name (SADR, Buffer (One)
            {
                 0x10                                             // .
            })
            Name (HIDS, Package (0x01)
            {
                "ELAN9008"
            })
            Name (HIDA, Buffer (One)
            {
                 0x01                                             // .
            })
            Method (_HID, 0, NotSerialized)  // _HID: Hardware ID
            {
                Return (DerefOf (Index (HIDS, TPLI)))
            }

            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                If (LEqual (Arg0, ToUUID ("3cdff6f7-4267-4555-ad05-b30a3d8938de") /* HID I2C Device */))
                {
                    If (LEqual (Arg2, Zero))
                    {
                        If (LEqual (Arg1, One))
                        {
                            Return (Buffer (One)
                            {
                                 0x03                                             // .
                            })
                        }
                        Else
                        {
                            Return (Buffer (One)
                            {
                                 0x00                                             // .
                            })
                        }
                    }

                    If (LEqual (Arg2, One))
                    {
                        Return (DerefOf (Index (HIDA, TPLI)))
                    }
                }
                Else
                {
                    Return (Buffer (One)
                    {
                         0x00                                             // .
                    })
                }
            }

            Method (_STA, 0, NotSerialized)  // _STA: Status
            {
                If (LEqual (TPLP, Zero))
                {
                    Return (Zero)
                }

                Return (0x0F)
            }

            Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
            {
                Name (SBFI, ResourceTemplate ()
                {
                    I2cSerialBusV2 (0x0010, ControllerInitiated, 0x00061A80,
                        AddressingMode7Bit, "\\_SB.PCI0.I2C2",
                        0x00, ResourceConsumer, _Y39, Exclusive,
                        )
                    Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, )
                    {
                        0x0000001B,
                    }
                })
                CreateWordField (SBFI, \_SB.PCI0.I2C2.TPL0._CRS._Y39._ADR, ADR1)  // _ADR: Address
                Store (DerefOf (Index (SADR, TPLI)), ADR1) /* \_SB_.PCI0.I2C2.TPL0._CRS.ADR1 */
                Return (SBFI) /* \_SB_.PCI0.I2C2.TPL0._CRS.SBFI */
            }
        }
    }
 
Hello all. I am completely defeated. I have a Lenovo Flex 14-iwl (very similar to S340/S540).

I would REALLY appreciate it if ANYONE, @ben9923, or @jaymonkey could take a look at my hot patch code for my touchpad for me. It works, but only in polling mode, and I am trying to remedy that. I've spent HOURS and can sift through code and figure out things out usually, but am not a programmer.

From what I can tell, my issue seems quite similar to the one @ben9923 fixed for @jaymonkey a few posts back, but I can't pin point the exact changes needed as my original DSDT code seems a bit different.

From what I learned from the Voodooi2c logs, ioreg, etc, I should be using pin 0x50, but it cannot register that pin, similar to @jaymonkey 's issue. I have attached my laptop's DSDT, my TPAD hot patch SSDT code, and the Voodooi2c log for good measure.

FYI The log info for TPXX & MSFT0001 pertains to my touchpad. You can disregard ECSH & WCOM51C7. Those are HID Sensors & my touchscreen, respectively. I am currently using SSDT-XOSI.aml while trying to fix this, but would like to remove and disable it, as it seems to have broken my brightness Function keys I mapped successfully.

VERY grateful for anyone willing to help, I am beyond frustrated. Thank you so much.

UPDATE: I actually got it working and fixed it! Just a few minor edits, but more importantly, since I had tried everything possible code-wise, I decided to dedicate time to sifting through the entire advanced BIOS menu. I eventually found a setting "Force Unlock On All GPIO Pads" and it was disabled. I did some research and thought this had a very high chance of being the fix and changed it to enabled. The pin that shows up in IOreg and Windows didn't work so I just used one of the values I had generated when following the Pinning Guide, and VOILA! Interrupt Mode!

I have not seen one person mention this setting anywhere and I see tons of people with Lenovo laptops similar to mine that are stuck in Polling mode. I hope people see this and it helps them. I may not get back the hours upon hours I spent trying to fix it, but hey I am grateful I did. A big thank you to Alex for his hard work on Voodooi2c and the rest of the community for theirs.
Hi @KingKlick, do you think this BIOS option could also work on touchscreen? My touchscreen do not need and GPIO patch in my DSDT/SSDT. However, it only has one point contact working without the multitouch gesture. The GPIO pins are lower than 0x2F, so I was thinking GPIO patch is not needed?
 
Hi @KingKlick, do you think this BIOS option could also work on touchscreen? My touchscreen do not need and GPIO patch in my DSDT/SSDT. However, it only has one point contact working without the multitouch gesture. The GPIO pins are lower than 0x2F, so I was thinking GPIO patch is not needed?

You can look in your bios, but I'm not sure my fix would help you in your case. That is, unless you have your touchscreen set up to use GPIO interrupts. You shouldn't have to though, because your apic pin is less than 2F, so you should be using apic interrupts.

Plus, I wasn't getting any movement at all until I fixed my bios settings. You on the other hand have basic function, but are just missing MT capability it sounds like.
 
You can look in your bios, but I'm not sure my fix would help you in your case. That is, unless you have your touchscreen set up to use GPIO interrupts. You shouldn't have to though, because your apic pin is less than 2F, so you should be using apic interrupts.

Plus, I wasn't getting any movement at all until I fixed my bios settings. You on the other hand have basic function, but are just missing MT capability it sounds like.
Thanks. Yes, my Bios has the option but it's hidden. I had to use setup_var_cv to change between ACPI and GPIO mode. However, it seemed nothing changed after I save the BIOS option and reboot.
 
Hello everyone.
I ask for help starting Trackpad.
I tried to do different SSDT-GPIOs, but nothing works.
My device is

Scope (_SB.PCI0.I2C0)
Device (TPD0)
APIC PIN 0x28 (IOREG <28 00 00 00 03 00 00 00>)

What to do next ?
Should I use:
- SSDT-GPIO?
- SSDT-XOSI?

I do not understand how to make the desired SSDT.
Thank you all in advance for your help.
 

Attachments

  • dsdt+ioreg+efi.zip
    31.4 MB · Views: 48
Last edited:
Hello everyone.
I ask for help starting Trackpad.
I tried to do different SSDT-GPIOs, but nothing works.
My device is

Scope (_SB.PCI0.I2C0)
Device (TPD0)
APIC PIN 0x28 (IOREG <28 00 00 00 03 00 00 00>)

What to do next ?
Should I use:
- SSDT-GPIO?
- SSDT-XOSI?

I do not understand how to make the desired SSDT.
Thank you all in advance for your help.
Try this one. If i'm right it should be enough to enable your I2C. And i guess you would need some satellite kext https://github.com/VoodooI2C/VoodooI2C/blob/master/Documentation/Satellites.md
 

Attachments

  • SSDT-GPI0_zaa.aml
    172 bytes · Views: 66
Thank you so much for your answer.

I tried:
reset NVRAM + SSDT only
reset NVRAM + VoodooI2CHID only
reset NVRAM + SSDT + VoodooI2CHID

Unfortunately it doesn't help. Trackpad doesn't work.
 
Last edited:
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
 
Status
Not open for further replies.
Back
Top