Contribute
Register

VoodooI2C Help and Support

Status
Not open for further replies.
One step ahead...

based on your hint @starcentral I realized that I both didn't rename the GPI0 _STA method to XSTA in my SSDT and had the renaming in my config.plist inactive as well.

I changed that now. Still no working trackpad though.
New file archive attached - IOReg, DSDTs inside.
 

Attachments

  • OC_EFI_extract_UX305UA.zip
    295.6 KB · Views: 56
Last edited:
Your GPIO patch doesn't have the patch in it, I found it in your I2C patch.

Remove your XCSR rename, I believe you should have _CRS in your patch but you've renamed it to XCSR.
Also try to remove your XSTA rename, it should be _STA.
 
Sorry for delay @starcentral .
Progress yes...and no (in the end I didn't manage to et dit to work)

In the meantime, I've applied every single patch mentioned in the VoodooI2C installation docu directly to my default DSDT and tracked each change via DiffMerge in order to derive the necessary SSDTs and ACPI Patches via config.plist. With Clover I patched the DSDT right away to get trackpad to work.

As you might have recognized already: I'm lacking the basics of ACPI patching via SSDT.




I need bascially all the patches mentioned:

1. VoodooI2C Windows 10 Patch -> SSDT-XOSI (Opencore Docu)
2. VoodooI2C I2C Controller Patch (Skylake Systems) -> SSDT-I2C-SKL ("Self made")
3. VodooI2C GPIO Controller Enable (Skylake +) -> SSDT-GPI0 (Opencore Docu)




Additionally I need GPIO Pinning -> SSDT-I2C ("Self made")
  • My Trackpads ACPI ID: ETPD. It's in the scope of _SB.PCI0-I2C1
  • I need to rename SBFI to SBFB within _CRS Method of my ETPD device & remove the "Interrupt..." paragraph
  • There's no "Name (SBFG,", neither in root, nor in _CSR method of my ETPD devide -> it's unpinned
  • The IOInteruptSpecifier of my ETPD device is 0x6d => this results in PIN 0x55
  • I have to add the "Name (SBFG..." parahraph to the root of my device and assign pin 0x55 to it.



Now fun begins:

Opencore Install Guide for Fixing Trackpads addresses both the Windows Patch (SSDT-XOSI.aml + Change _OSI to XOSI patch), as well as GPI0 Controller Enable (SSDT-GPI0.aml -> in my case GPEN = One).

With these patches + VoodooI2C.kext & VodooI2CELAN.kext installed, I can find the GPI0 device in IORegistry explorer and VodooGPIOSunrisePointLP is attached to it. That makes me confident that this should work as a basis. ETPD is listed as "ETPD@1" though and it's not underneath I2C1.

Within the scope of my ETPD Device (_SB.PCI0.I2C1.ETPD) I now need to...
  • Add "Name (SBFG,..." to the root of the device
  • Replace _CSR method with the adjusted one (SBFI rename to SBFG)
I created the following SSDT-I2C to handle this:


Code:
/*

 * Intel ACPI Component Architecture

 * AML/ASL+ Disassembler version 20180427 (64-bit version)(RM)

 * Copyright (c) 2000 - 2018 Intel Corporation

 *

 * Disassembling to non-symbolic legacy ASL operators

 *

 * Disassembly of iASL7bF6xf.aml, Wed Feb 16 21:00:25 2022

 *

 * Original Table Header:

 *     Signature        "SSDT"

 *     Length           0x000000C3 (195)

 *     Revision         0x02

 *     Checksum         0x4B

 *     OEM ID           "hack"

 *     OEM Table ID     "ETPD"

 *     OEM Revision     0x00000000 (0)

 *     Compiler ID      "INTL"

 *     Compiler Version 0x20180427 (538444839)

 */

DefinitionBlock ("", "SSDT", 2, "hack", "ETPD", 0x00000000)

{

    External (_SB_.PCI0.I2C1.ETPD, DeviceObj)    // (from opcode)



    Scope (_SB.PCI0.I2C1.ETPD)

    {

        Name (SBFG, ResourceTemplate ()

        {

            GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000,

                "\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,

                )

                {   // Pin list

                    0x0055

                }

        })

        Method (_CRS, 0, Serialized)  // _CRS: Current Resource Settings

        {

            Name (SBFB, ResourceTemplate ()

            {

                I2cSerialBusV2 (0x0015, ControllerInitiated, 0x00061A80,

                    AddressingMode7Bit, "\\_SB.PCI0.I2C1",

                    0x00, ResourceConsumer, , Exclusive,

                    )

            })

            Return (ConcatenateResTemplate (SBFB, SBFG))

        }

    }

}

the Skylake I2C controller patch I will leave out for the time being.

Now the questions part:

SSDTs contained in OC/ACPI are loaded "on top" to the firmware DSDT as far as I undertood.
Hence I would assume that the paragraph "Name (SBFG.." is simply added to the scope of (_SB.PCI0.I2C1.ETPD).
It was missing in my DSDT before and is now added via SSDT.

The _CSR method is already contained in my DSDT. This needs to be replaced with the one, I put inside the SSDT-I2C, doesn't it?

My understanding is, that I have to add a patch to the config.plist that renames the _CSR method in my DSDT (usually to XCSR) in order to somehow comment it out while the changed _CSR method is loaded via SSDT.
  1. is that correct in general?
  2. do renaming patches only apply to the original DSDT (=they are not applied to any SSDT / DSDT contained in OC/ACPI)?
  3. how do I make sure to only rename that specific method within the context of the desired device
    • Opencore plist contains a string-type "Base" argument within each patch. I've seen something like this in it: \_SB.PCI0.I2C1.ETPD
    • For other patches it seems that the specification might be contained in the "find" / "replace" arguments
  4. the SSDTs contain (several) "External"-statements. what needs to be referenced there despite the Deviceobject?
_OSI to XOSI renaming looks streight away in my config.plist (5F4F5349 to 584F5349).

Thanks a lot for your time and patience!
 
Last edited:
Below is your SSDT-I2C and you have _STA and _CRS renamed. I mentioned this previously but I believe that is your issue.

Rename XSTA to _STA and XCRS to _CRS


DefinitionBlock ("", "SSDT", 2, "hack", "ETPD", 0x00000000)
{
External (_SB_.PCI0.GPI0, DeviceObj) // (from opcode)
External (_SB_.PCI0.I2C1.ETPD, DeviceObj) // (from opcode)

Scope (_SB.PCI0.GPI0)
{
Method (XSTA, 0, NotSerialized)
{
Return (0x0F)
}
}

Scope (_SB.PCI0.I2C1.ETPD)
{
Name (SBFG, ResourceTemplate ()
{
GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000,
"\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x0055
}
})
Method (XCRS, 0, Serialized)
{
Name (SBFB, ResourceTemplate ()
{
I2cSerialBusV2 (0x0015, ControllerInitiated, 0x00061A80,
AddressingMode7Bit, "\\_SB.PCI0.I2C1",
0x00, ResourceConsumer, , Exclusive,
)
})
Return (ConcatenateResTemplate (SBFB, SBFG))
}
}
}
 
Last edited:
I forgot to mention, but I fixed that already in my current SSDT-I2C (the version I use right now is contained in my previous post).

The patch for the _STA Method within the scope _SB.PCI0.GPI0 is to my knowledge handled by the SSDT-GPI0 patch following the OpenCore Docu.

Code:
DefinitionBlock ("", "SSDT", 2, "DRTNIA", "GPI0", 0x00000000)
{
    External (GPEN, FieldUnitObj)    // (from opcode)

    If (_OSI ("Darwin"))
    {
        Store (One, \GPEN)
    }
}
 
Status
Not open for further replies.
Back
Top