Jump to content
onemanosx

Enable I2C Trackpad (VoodooI2C) - Not a Guide... not really

Recommended Posts

This post is not meant to be a guide. Instead, I hope this thread is able to gather all VoodooI2C kext users to share their knowledge and new users to be able to activate their I2C track pads. This write up is a simplified version of the original to benefit new hackintoshers. It is always advised to read the actual documentation by the developer in case I had missed out important key points.

 

Another note, users are urged to participate in developer's gitter chat for better support or report major issues. And you are expected to had done the preliminary steps mentioned below. I would like to point out again that this is not an official VoodooI2C help page.

 

IMPORTANT 1: Ensure 'Disable built-in trackpad when...' is disabled within accessibility preferencesThis setting usually appears when your I2C device is fully detected in ioreg app but trackpad still do not function. Or, trackpad do not function when a USB mouse is connected. So, if you have not got your trackpad working, then move on to the next steps.

 

OixkqsSl.png 

 

IMPORTANT 2: Enable advanced option for trackpad in bios if option is available.

 

IMPORTANT 3: Delete Trackpad and Mouse plugin from within VoodooPS2Controller kext to avoid conflict. We only need the keyboard plugin. Except in certain scenarios where touch screen is an I2C device and trackpad is a PS2, then do not remove the plugin.

 

4EonIZO.png

 

IMPORTANT 4: Disable _DSM to XDSM/ZDSM patches. This is one of the common mistakes found from most new users. DO NOT USE THESE PATCHES.

 

oy1cdhT.png

 

As of VoodooI2C Release v2.3, It is no longer necessary to patch/remove the built-in I2C kexts to make VoodooI2C load. Hence, Coolstar's patch below is deprecated.

 

IMPORTANT 5: Disable Apple's I2C Kext to patch by adding Coolstar's patch below

 

Include Coolstar's patch in Clover's kext to patch.

 

<key>KextsToPatch</key>
	<array>          
		<dict>
			<key>Comment</key>
			<string>Prevent Apple I2C kexts from attaching to I2C controllers, credit CoolStar</string>
			<key>Disabled</key>
			<false/>
			<key>Find</key>
			<data>
			SU9LaXQ=
			</data>
			<key>InfoPlistPatch</key>
			<true/>
			<key>Name</key>
			<string>com.apple.driver.AppleIntelLpssI2C</string>
			<key>Replace</key>
			<data>
			SU9LaXM=
			</data>
		</dict>
		<dict>
			<key>Comment</key>
			<string>Prevent Apple I2C kexts from attaching to I2C controllers, credit CoolStar</string>
			<key>Disabled</key>
			<false/>
			<key>Find</key>
			<data>
			SU9LaXQ=
			</data>
			<key>InfoPlistPatch</key>
			<true/>
			<key>Name</key>
			<string>com.apple.driver.AppleIntelLpssI2CController</string>
			<key>Replace</key>
			<data>
			SU9LaXM=
			</data>
		</dict>
	</array>
</dict>
 

Or, if you are using plist editor/ xcode/ clover configurator. Refer to the the screenshot below.

 

Plist Editor/Xcode

66T16Z7.png

 

Clover Configurator

vrqjgh5.png

 

IMPORTANT 6: Update to the latest BIOS version if available. Some machines had been reported to have working/ better trackpad experience after a BIOS update.

 

IMPORTANT 7: Never.

NEVER INSTALL KEXTS in System/Library/Extension (S/L/E)!

For the ease of troubleshooting, keep your kexts in Clover/Kexts/Other and that works majority of the time!

If you have had installed kexts using kext installer app or similar, REMOVE the installed kexts in S/L/E (or L/E) NOW!! Keep kexts at Clover/Kexts/Other only.

 

OPTIONAL:

 

In the past, track pad tends to be disabled after every OS update and a simple rebuild of kext cache then rebooting will solve that minor issue. However, adding these in config.plist force loads trackpad without rebuilding kext cache (I'd recommend to still do a rebuild, anyway ;) )

 

<key>ForceKextsToLoad</key>
<array>
<string>\System\Library\Extensions\IOGraphicsFamily.kext</string>
</array>
 

Additional Info :

 

Some users might want to check that the trackpad settings are ticked or configured. In some cases, trackpad will only work like a normal mouse if the settings are not chosen. If you do not have these trackpad settings appear, it is likely you do not have a working battery status or you are using the wrong voodooI2C satellite kext or you did not choose advance setting for trackpad in BIOS.

 

ZzzIq6h.png

 

This is the official VoodooI2C gitter chat where you can ask the dev for comprehensive support

https://gitter.im/alexandred/VoodooI2C

 

It is also a known issue (at least in my knowledge at this point of writing) that certain version of kexts are not compatible with some devices and may involve some trial and error of different releases of kexts.

 

*Note: You must not have any other I2C kexts installed except for VoodooI2C kexts.

 

The following device classes are fully supported:

 

- I2C-HID devices

- ELAN devices

- FTE devices

 

Before posting for help and attaching send me files, new users are advised to take the below steps which are crucial. These preliminary steps are also outlined by the original dev in his wiki guide.

 

How to provide debug files

 

An easy way to provide debugging files is to run to run this app http://Olarila.com/files/Utils/RunMe.app.zip.

Run the app and do not do anything until the app has finished collecting all necessary files. Then upload the sendme folder created on desktop.

Also, before using Run_me app, make sure you boot from your SSD/HDD clover and NOT from USB bootable disk!

 

VoodooI2C Dev guide can be read HERE.

 

Lets Begin!

 

Basically, we are required to know these 3 main items

 

1. ACPI ID

2. APIC Pin Number

3. Ensure I2C Serial bus name are correctly labelled in DSDT.

 

Below are the steps on how to achieve the 3 criteria mentioned above.

 

Step 1 - Identify ACPI ID or GPIO pinning

 

If you have windows installed in another partition or drive, use Windows Device Manager to locate your device's ACPI ID like shown in the picture below.

 

FIJPN8P.png

 

In this example, the ACPI ID is TPL0

 

If you do not have windows installed, dont worry, continue to follow the step below

 

Step 2. Determining your interrupt pinning situation/ APIC pin number

 

a. First compile your DSDT by simply pressing F4 at clover boot. The file will be available at Clover/ACPI/Origin

b. Patch your DSDT with windows patch script below using MaciASL.

If your CPU is Skylake and above, also add GPI0 controller patch

 

Windows Emulation patch

into_all method code_regex If\s+\([\\]?_OSI\s+\(\"Windows\s2015\"\)\) replace_matched begin If(LOr(_OSI("Darwin"),_OSI("Windows 2015"))) end;
 

GPI0 controller patch

into method label _STA parent_label GPI0 replace_content begin

Return (0x0F)

end;
 

c. Place the patched DSDT into your clover/ACPI/patched folder. Reboot.

d. Use IOREG to find your ACPI ID like below picture

 

arLFTF3.png

 

In this example, the ACPI ID is TPD1.

 

Click on IOInterruptSpecifiers to reveal the hexadecimal APIC pin number. In this example the APIC pin number is 0x33. If we convert 0x33 to decimal, it will be 51.

 

If your APIC pin number is equal or less than 47, you can proceed to install kexts.

If you do not have IOInterruptSpecifiers, you can also proceed to install kexts.

 

Download latest kexts HERE

 

Always install 3rd party kexts in Clover/kexts/other. DO NOT install kexts in S/L/E! NEVER!

 

Step 3. Ensure I2C Serial bus name is correctly labelled

 

You will also need to make sure that your I2C Serial Bus Name is correctly labelled. Search for your device ACPI ID in your DSDT until you reach its device entry, you should be able to find a Name called SBFB. If you cannot find it, you may find something that looks like this instead:

 

Method (_CRS, 0, Serialized)  // _CRS: Current Resource Settings
               {
                   Name (SBFI, ResourceTemplate ()
                   {
                       I2cSerialBusV2 (0x0015, ControllerInitiated, 0x00061A80,
                           AddressingMode7Bit, "\\_SB.PCI0.I2C1",
                           0x00, ResourceConsumer, , Exclusive,
                           )
                       Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, )
                       {
                           0x0000006D,
                       }
                   })
                   Return (SBFI)
               }
 

In this case, rename SBFI to SBFB and remove the following from it:

 

Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, )
   {
       0x0000006D,
   }
 

But, what if your APIC pin number is greater than 47?

 

to be continued..

 

Note: All guide and thanks to the hardwork of original developer whom can be contacted at https://gitter.im/alexandred/VoodooI2C

Donate

Gitter Chat


Acer Aspire V15 Nitro- Black Edition VN7-592G/HM170 Chipset

Intel i7-6700HQ, 8GB RAM (UEFI Clover Catalina)


MSI B360 Gaming Arctic

Intel i5-8600 16GB RAM Asus Radeon RX580 8GB (UEFI Clover Catalina)

Link to comment
Share on other sites

I2C device with APIC Pin Number greater than hex 0x2f (or decimal 47)

 

In post 1, I describe the procedure or implementation for I2C device with APIC Pin Number less than or equal to 0x2f (HEX). Let us now proceed for devices with APIC Pin Number GREATER than 0x2f.

 

1. Open DSDT and find the below SBFG Name

 

Name (SBFG, ResourceTemplate ()
   {
       GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000,
           "\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
           )
           {   // Pin list
               0x0000
           }
   })
 

If you are not able to find the code above in your DSDT, then you will need to add in manually. Thus, after manually adding the code in the DSDT, we will now need to define a proper pin.

 

Manually pinning a device

 

As an example, we will use the hexadecimal APIC Pin number of 0x33 (i.e decimal 51)

 

KokpycD.png

 

a. Go to this SITE

b. Look for hexadecimal 0x33 in the table and take note of the IRQ table on the left pane. Here, 0x33 corresponds to #define GPP_B3_IRQ

 

qu1DBQm.png

 

c. Then we will go to this SITE

 

Here we will find the corresponding decimal digit for #define GPP_B3_IRQ which is 27

 

IayVSFJ.png

 

If we convert decimal 27 into HEX, we will get 0x1B. This is our pin! Hence, our code will now look like this in the DSDT.

 

Name (SBFG, ResourceTemplate ()
   {
       GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000,
           "\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
           )
           {   // Pin list
               0x1B
           }
   })
 

Finally, the last step will be ensuring that the device is well pinned by checking _CRS method in DSDT so that it returns as

 

Return (ConcatenateResTemplate (SBFB, SBFG))
 

In my case originally _CRS looks like this

 

Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
           {
               If ((OSYS < 0x07DC))
               {
                   Return (SBFI) 
               }

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

               Return (ConcatenateResTemplate (SBFB, SBFI))
           }
 

This is how it looks like eventually.

 

Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
           {
               If ((OSYS < 0x07DC))
               {
                   Return (SBFI) 
               }

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

               Return (ConcatenateResTemplate (SBFB, SBFG))
           }
 

We can now install our kexts and test if our trackpad is working!

 

NOTE: For other ACPI tables, one might not find the exact _CRS return as demonstrated. What we should really focus on is that there are no SBFI. If there is, just change it to SBFG.

 

The above procedure describes if SBFG Name is not found in DSDT. So, what shall we do if SBFG Name exists? In this instance, we will just need to ensure that Method _CRS will return as

 

Return (ConcatenateResTemplate (SBFB, SBFG))
 

And we can proceed to install our kexts and reboot!

 

Finding a usable pin as described in the example above is when GPI0 is "SunrisepointLP".

 

89unq5C.png

 

Look down the list below for other GPI0 names.

 

For CannonPointLP:

The IRQ table is HERE

And the second reference table for CannonPointLP is HERE

 

For CannonPoint_H:

IRQ table is HERE

And second reference table for CannonPoint-H is HERE

 

GPI0 with multiple communities

 

On newer chipsets (Cannon Point and newer), there is a mismatch between the GPIO pin and the hardware pin number. If you are using such hardware, you will need to convert the hardware pin number you have found to a GPIO pin, to allow the driver to use the pin.

 

For CannonPointLP is HERE

For CannonPoint-H is HERE

 

The pin calculation for GPI0 with multiple communities is different from the "older" chip sets but here is the quote from dev site. Its actually quite simple. ;)

 

GPIO pins are divided to multiple communities, containing multiple GPPs each. During the mapping from an APIC pin to a GPIO pin you have found a label in the form GPP_XYY_IRQ, or GPP_XYY. X is the GPP identifier you are looking for. Find the GPP of the pin you have found in one of the communities in the link. A GPP will have the form CHIPSET_GPP(num, base, end, gpio_base), /* GPP_X */. To convert your hardware pin to a usable GPIO pin, take the decimal GPIO pin number you have found, subtract the base, then add the gpio_base. The result is your GPIO pin number. Notice a gpio_base of X_NO_GPIO means this pin is not valid for use.

 

Convert this to a hexadecimal number, this is your hexadecimal GPIO pin. You may notice that your hexadecimal APIC pin appears multiple times in the first list mentioned above. You will need to repeat the lookup process for all occurences of your hexadecimal APIC pin to obtain all possible hexadecimal GPIO pins. You will then need to test all of them to see which one works.

 

EXAMPLE

 

As an example, say we have APIC pin of 0x5F for CannonPointH. Looking through the table HERE we have three IRQ values i.e

 

GPP_C23

GPP_H23

GPP_K23

 

Next we go to the second reference table for CannonPointH HERE

 

And we find these pins in Decimal

 

GPP_C23 > 74

GPP_H23 > 202

GPP_K23 > 178

 

Finally, we go to the third table for CannonPointH HERE. And the pin calculation is as per illustrated below:

 

CNL_GPP(0, 51, 74, 64),

74 - 51 + 64 = 87 = 0x0057

 

CNL_GPP(0, 155, 178, 192)

178-155+192= 215 = 0x00D7

 

CNL_GPP(1, 179, 202, 224)

202-179+224= 247 = 0x00F7

 

So, we have 3 GPI0 pins to test with and hopefully one of the pins will work for interrupt mode.

 

Note that (in very rare cases), the corresponding GPIO hexadecimal pin will not work. In this case, you can try some of the common values such as 0x17, 0x1B, 0x34 and 0x55.

 

That is all! :guitar:guitar:cap:cap

Donate

Gitter Chat


Acer Aspire V15 Nitro- Black Edition VN7-592G/HM170 Chipset

Intel i7-6700HQ, 8GB RAM (UEFI Clover Catalina)


MSI B360 Gaming Arctic

Intel i5-8600 16GB RAM Asus Radeon RX580 8GB (UEFI Clover Catalina)

Link to comment
Share on other sites

[ref]imran.sefat[/ref],


Boot with attached clover folder and run http://Olarila.com/files/Utils/RunMe.app.zip

Imran-CLOVER.zip

 




Added in 22 minutes 7 seconds:

[ref]sarakabir[/ref],


Your SSDT-ELAN refers to the wrong I2C device. Your I2C device is TPD0 and not ETPD


 

1285522171_Screenshot2018-12-24at9_39_11PM.thumb.png.4fe994de5d675224be9649c6127bb533.png

Donate

Gitter Chat


Acer Aspire V15 Nitro- Black Edition VN7-592G/HM170 Chipset

Intel i7-6700HQ, 8GB RAM (UEFI Clover Catalina)


MSI B360 Gaming Arctic

Intel i5-8600 16GB RAM Asus Radeon RX580 8GB (UEFI Clover Catalina)

Link to comment
Share on other sites

[ref]onemanosx[/ref], :guitar:guitar:guitar

AMD Ryzen 7 3700X, MSI MPG X570 Gaming Plus, Corsair Vengeance RGB PRO 16GB DDR4 3200MHz, Sapphire rx 5700 XT, fractal celcius s36

:superman:superman

HP Notebook - 15-ay028ca (Touch), 16 GB 2133 MHz DDR4, Intel HD Graphics 520 1536 MB

Asus z97-c i5, i5 4460, 32 GB 1648 MHz DDR3, Radeon RX 560 4096 MB, Corsair H75 Liquid CPU Cooler

Link to comment
Share on other sites

[ref]imran.sefat[/ref],


Boot with attached clover folder and run http://Olarila.com/files/Utils/RunMe.app.zip

Imran-CLOVER.zip





Added in 22 minutes 7 seconds:

[ref]sarakabir[/ref],


Your SSDT-ELAN refers to the wrong I2C device. Your I2C device is TPD0 and not ETPD



Screenshot 2018-12-24 at 9.39.11 PM.png

 

[ref]onemanosx[/ref],

The trackpad is working now but the sound isn't working after replacing clover folder,

I already changed the layout id but it didn't work. previously layout 17 worked for me but now the sound isn't working in layout 3, 13, 17, 18, 27, 28, 99

Send me Imrans-MacBook-Pro final 2 .zip

Link to comment
Share on other sites

:guitar:guitar:guitar:cap

 

please help! :cry::cry:


I fully installed Mojave using the olarilla image and the clover folder that you gave me with apfs format and replaced the clover folder in my hdd

now I'm facing some problems

1. Sound is not working

2. keyboard and trackpad is working fine but in trackpad option in system preference showing looking for bluetooth trackpad

3. battery percentage is not showing

4. when I turned on the option to show brightness option in menu bar, it doesn't work

Send me Imrans-MacBook-Pro.zip

Link to comment
Share on other sites

what should I do about the other problems ? can you please help me out ? sound isn't working either

create new post. This thread is for I2C trackpad only

Donate

Gitter Chat


Acer Aspire V15 Nitro- Black Edition VN7-592G/HM170 Chipset

Intel i7-6700HQ, 8GB RAM (UEFI Clover Catalina)


MSI B360 Gaming Arctic

Intel i5-8600 16GB RAM Asus Radeon RX580 8GB (UEFI Clover Catalina)

Link to comment
Share on other sites

trackpad option came after installing ACPI battery manager kext

good to know! I was also reading about it earlier. Congrats!


[ref]broadw3ll[/ref], fyi

Donate

Gitter Chat


Acer Aspire V15 Nitro- Black Edition VN7-592G/HM170 Chipset

Intel i7-6700HQ, 8GB RAM (UEFI Clover Catalina)


MSI B360 Gaming Arctic

Intel i5-8600 16GB RAM Asus Radeon RX580 8GB (UEFI Clover Catalina)

Link to comment
Share on other sites

[ref]broadw3ll[/ref], implement your battery status and see where that will lead you to. The same info is also given to me by one of the regular community at voodooI2C gitter.

Donate

Gitter Chat


Acer Aspire V15 Nitro- Black Edition VN7-592G/HM170 Chipset

Intel i7-6700HQ, 8GB RAM (UEFI Clover Catalina)


MSI B360 Gaming Arctic

Intel i5-8600 16GB RAM Asus Radeon RX580 8GB (UEFI Clover Catalina)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
  • Create New...
The popup will be closed in 15 seconds...