Contribute
Register

VoodooI2C Help and Support

Status
Not open for further replies.
Joined
Nov 8, 2014
Messages
130
Mac
  1. 0
Classic Mac
  1. 0
Mobile Phone
  1. 0
This thread is intended for users of VoodooI2C to get support for using the kext on their system.

What is VoodooI2C?

VoodooI2C is a project consisting of macOS kernel extensions that add support for I2C bus devices. The project is split into two main components: the core extension and various other satellite extensions.

The Core
The core is the VoodooI2C.kext kernel extension. This kext is intended to be installed by anyone whose computer requires some form of I2C support. It consists of I2C controller drivers and is responsible for publishing device nubs to the IOService plane.

The Satellites
The satellites are a collection of various kernel extensions that implement support for a specific type of I2C device. An example of a satellite kext is VoodooI2CHID.kext which adds support for I2C-HID devices. Usually a user will install one satellite kext per class of I2C device.

What can I use VoodooI2C for?

The most common devices that are compatible with VoodooI2C are I2C-HID devices such as Precision Trackpads and Touchscreens. If you have an I2C trackpad or touchscreen, chances are it will work with this driver. It is also possible to use VoodooI2C to get multitouch on USB devices but this is experimental.

How do I install VoodooI2C?

All installation instructions can be found here: https://voodooi2c.github.io/#Installation/Installation

Help! It doesn't work

Follow carefully the instructions here: https://voodooi2c.github.io/#Troubleshooting/Troubleshooting

Where is the source code?

The main Github repository can be found here: https://github.com/alexandred/VoodooI2C

Upload all requested files in an archive to this thread. Note that if you are on 10.12+ then the system log has been moved. Instructions for how to obtain it can be found on the following page: https://voodooi2c.github.io/#Common Errors/Common Errors
 
Last edited:
i tried to follow the GPIO PINNING guide but the touchpad is unresponsive.
it works right up untill i install the new kexts.

i had issues with this part of the guide:

The corresponding number on the right is your decimal GPIO pin number. Convert this to a hexadecimal number. If your hexadecimal APIC pin is between 0x5c and 0x77 inclusive then this is your hexadecimal GPIO pin. If your hexadecimal APIC pin does not fall in this range then you will notice that it appears twice in the first list mentioned above. You will need to repeat the lookup process for both occurences of your hexadecimal APIC pin to obtain two possible hexadecimal GPIO pins. You will then need to test both of them to see which one works.

im not sure whether you made a mistake with the parts marked red?
but heres my calculation
Screen Shot 2018-01-17 at 23.39.32.png

0x5f = #define GPP_C23_IRQ = #define GPP_C23 = 71 in decimal 0x47 in hex?

Convert this to a hexadecimal number. If your hexadecimal APIC pin? is between 0x5c and 0x77 inclusive then this is your hexadecimal GPIO pin.

do you mean GPIO Pin?

also heres how my dsdt's look

im not sure whether this code being under DEVICE TPL1 breaks things?

Code:
        Device (TPL1)
        {
            Name (HID2, Zero)
            Name (SBFB, ResourceTemplate ()
            {
                I2cSerialBusV2 (0x004C, ControllerInitiated, 0x00061A80,
                    AddressingMode7Bit, "\\_SB.PCI0.I2C1",
                    0x00, ResourceConsumer, _Y28, Exclusive,
                    )
            })
            Name (SBFG, ResourceTemplate ()
            {
                GpioInt (Level, ActiveLow, Exclusive, PullDefault, 0x0000,
                    "\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
                    )
                    {   // Pin list
                        0x047
                    }
            })
            Name (SBFI, ResourceTemplate ()
            {
                Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, _Y29)
                {
                    0x00000000,
                }
            })

i edited the CRS Method in TPL1 from this:
Code:
            Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
            {
                If (LLess (OSYS, 0x07DC))
                {
                    Return (SBFI)
                }

                If (LEqual (SDM1, Zero))
                {
                    Return (ConcatenateResTemplate (SBFB, SBFG))
                }

                Return (ConcatenateResTemplate (SBFB, SBFI))
            }
to this:
Code:
Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
            {
                Return (ConcatenateResTemplate (SBFB, SBFG))
            }
the guide didnt define which Device as theres also this in ETPD my touchpad device:
Code:
    Scope (_SB.PCI0.I2C1)
    {
        Device (ETPD)
        {
            Name (SBFB, ResourceTemplate ()
            {
                I2cSerialBusV2 (0x004C, ControllerInitiated, 0x00061A80,
                    AddressingMode7Bit, "\\_SB.PCI0.I2C1",
                    0x00, ResourceConsumer, _Y34, Exclusive,
                    )
            })
            Name (SBFI, ResourceTemplate ()
            {
                Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, )
                {
                    0x0000005F,
                }
            })
            Name (EPID, Package (0x04)
            {
                "ELAN1200",
                "N/A",
                "N/A",
                "N/A"
            })
            Name (FPID, Package (0x04)
            {
                "FTE1200",
                "N/A",
                "N/A",
                "N/A"
            })
            CreateWordField (SBFB, \_SB.PCI0.I2C1.ETPD._Y34._ADR, BADR)  // _ADR: Address
            Name (_ADR, One)  // _ADR: Address
            Method (_HID, 0, NotSerialized)  // _HID: Hardware ID
            {
                If (ELAN)
                {
                    Store (0x15, BADR)
                    Return (DerefOf (Index (EPID, TPSL)))
                }

                If (FOLT)
                {
                    Store (0x15, BADR)
                    Return (DerefOf (Index (FPID, TPSL)))
                }

                Return ("ELAN1000")
            }

            Name (_CID, "PNP0C50")  // _CID: Compatible ID
            Name (_UID, One)  // _UID: Unique ID
            Name (_S0W, 0x03)  // _S0W: S0 Device Wake State
            Method (_S3W, 0, NotSerialized)  // _S3W: S3 Device Wake State
            {
                If (LEqual (S0ID, Zero))
                {
                    Return (0x03)
                }
                Else
                {
                    Return (Zero)
                }
            }

            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 (One)
                    }
                }
                Else
                {
                    Return (Buffer (One)
                    {
                         0x00                                          
                    })
                }
            }

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

                If (And (DSYN, One))
                {
                    Return (Zero)
                }

                Return (0x0F)
            }

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

im confused with this other device, as it relates to I2C1 within the guide
 
There is nothing wrong with the GPIO pinning guide, APIC is there for a reason.

Evidently your trackpad is ETPD, the guide tells you how to find that ID, im not sure why you settled with TPL1.
 
Hello!

After straight installing V2.0.1 Core+HID kexts on my Skylake Razer stealth
(DSDT patch checked! GPIO=1f lower than 2f! TouchScreen and Trackpad are all i2C)

I got my touch screen working with gestures and trackpad as a single click mouse

Here's the question, is it possible to get gestures working on my trackpad as well

If so, what infos do I need to provide?

And thank you for your effort on this project, this laptop only needs gesture on trackpad to become a perfect hack!!
 
Hello!

After straight installing V2.0.1 Core+HID kexts on my Skylake Razer stealth
(DSDT patch checked! GPIO=1f lower than 2f! TouchScreen and Trackpad are all i2C)

I got my touch screen working with gestures and trackpad as a single click mouse

Here's the question, is it possible to get gestures working on my trackpad as well

If so, what infos do I need to provide?

And thank you for your effort on this project, this laptop only needs gesture on trackpad to become a perfect hack!!

Read the instructions here: https://voodooi2c.github.io/#Troubleshooting/Troubleshooting and upload the requested archive to this thread.
 
tried again and have it working now thanks!

However
Convert this to a hexadecimal number. If your hexadecimal APIC pin is between 0x5c and 0x77 inclusive then this is your hexadecimal GPIO pin. If your hexadecimal APIC pin does not fall in this range then you will notice that it appears twice in the first list mentioned above. You will need to repeat the lookup process for both occurences of your hexadecimal APIC pin to obtain two possible hexadecimal GPIO pins. You will then need to test both of them to see which one works.

wasn't true and the one i had worked first time, my pin didnt appear twice
 
Last edited:
tried again and have it working now thanks!

However


wasn't true and the one i had worked first time, my pin didnt appear twice

Your hexadecimal APIC pin is 0x5f. This is between 0x5c and 0x6f and so there is only one GPIO pin associated to it. Hence the guide is correct.
 
Status
Not open for further replies.
Back
Top