• Become a Premium Member for $25/year with no ads to improve your community experience.

GUIDE How to Enable I2C Trackpad/TouchPad on macOS [Clover/OpenCore]

EliteMacx86

Administrator
Staff member
Joined
Jul 22, 2018
Messages
8,153
Motherboard
Supermicro X11SPA-T
CPU
Intel Xeon W-3275 28 Core
Graphics
2xAMD RX 580 8GB
OS X/macOS
13.x
Bootloader
  1. OpenCore (UEFI)
Mac
  1. Mac mini
  2. MacBook Pro
Mobile Phone
  1. Android
  2. iOS
How to Enable I2C Trackpad on macOS [Clover/OpenCore]

This guide covers fixing I2C Trackpad or Touchpad on macOS using Clover and OpenCore. By following this guide, you'll be able to enable I2C Trackpad or Touchpad on macOS using Clover or OpenCore Bootloader.

Please note that this guide is only for I2C Trackpads. If you're having a PS/2 Trackpad, you can follow the original guide for the PS/2 Trackpad linked below:

Overview


What is I2C?

What is VoodooI2C?



Support
The following I2C Controllers are fully supported under macOS:
INT33C2 and INT33C3 - Haswell era
INT3432 and INT3433 - Broadwell era
pci8086,9d60, pci8086,9d61, pci8086,9d62 and pci8086,9d63 - Skylake era
pci8086,a160, pci8086,a161, pci8086,a162 and pci8086,a163 - Kaby Lake era
pci8086,9de8, pci8086,9de9, pci8086,9dea and pci8086,9deb - Cannon Lake/Whiskey Lake era
pci8086,a368, pci8086,a369, pci8086,a36a and pci8086,a36b - Coffee Lake era
pci8086,2e8, pci8086,2e9, pci8086,2ea, pci8086,2eb, pci8086,6e8, pci8086,6e9, pci8086,6ea and pci8086,6eb- Comet Lake era
pci8086,34e8, pci8086,34e9, pci8086,34ea and pci8086,34eb - Ice Lake era

A partial support is also available for AMD based I2C Controllers
AMD0010
AMDI0010
AMDI0510


The following device classes are fully supported under macOS:
I2C-HID devices
ELAN devices
FTE devices


You can either directly patch the DSDT (static) patching or can use Hotpatch.

Understanding the Kexts
The VoodooI2C package consists of two main kexts: Core and Satellite

Core Kext
The core kext is the VoodooI2C.kext. This kext is required for the I2C support (Trackpad, Touchscreen or any other form of I2C Device). It consists of I2C controller drivers and is responsible for publishing device nubs to the IOService plane. This is considered as the main I2C driver. It should be noted that the Core kext does not work alone and requires the Satellite kext to function, in order to enable a particular I2C device under macOS.

Satellite Kext
The satellite kexts are a collection of various kernel extensions intended to enable support for a specific type of I2C device. VoodooI2CHID.kext is a satellite kext which is one of the most common satellite kext which provides support for several I2C-HID devices. Usually, a single satellite kext is sufficient for the functioning of the a specific class of I2C device, unless it requires multiple satellite kext to function well or to extend and/or enhance the functionalities of a particular I2C device (such as Dell Laptops).


I2C Modes
Particularly, there are two modes for using an I2C Device. GPIO (Interrupt) Mode and Polling Mode. Both the methods have their own pros and cons. Read below to understand and what to use. have explained in detail below:

Polling Mode
As you might be aware of Apple's hardware selection, which is quite picky and not the general hardware has support under macOS. What hardware works under Windows and Linux, it may not work at all under macOS. The same applies for the I2C based devices such as Trackpads/Touchpads, Touchscreen and other possible I2C devices. Due to certain incompatibilities with the Apple's core kexts, it is often necessary to manually patch the DSDT to enable the GPIO interrupts. This is required, especially for SKL and newer series devices. The process of GPIO patching is quite complex and due to this, certain satellite kexts (currently only VoodooI2CHID) support running in two different modes:

Polling
Interrupts (either APIC or GPIO)

Polling Mode
Polling mode is the basic mode and can be considered as a safe boot mode of the VoodooI2C. This is easiest way to implement the support for a particular I2C device under macOS. The process is fairly easy and with a few basic edits, it can be made to work. It is highly suitable to use during the macOS installation. However, it is highly recommended that once the macOS is installed and running, you should use the GPIO patches (except Haswell and Broadwell) to ensure a better support, optimal performance and seamless functioning of the particular I2C device. The Polling mode is also suitable for users whose machine have a buggy GPIO implementation (such as ASUS Laptops). If you have not made any prior attempts to patch the DSDT to make your trackpad working, you would not need any DSDT/SSDT edits as well.

If you find that you cannot get your trackpad to work in the interrupt mode or that the interrupt mode leads to high CPU usage either during normal load or after wake, it is likely you have a system with a buggy implementation of GPIO. In such case, you will have to switch back to polling mode to prevent the high CPU usage. Before you consider reverting back to polling mode, you should go through this guide entirely and troubleshoot the implementation to ensure you have not made a mistake or skipped a step in the process of following guide.

As patching the GPIO pinning is quite complex, most of the users do not have the knowledge and skills required to patch and therefore, they often prefer to go with the Polling mode route, as its easy for them and as long as it works, with few cons (such as high CPU usage after wake), the polling mode makes great choice for such users.


Requirements​



Following are the requirements for enabling I2C Trackpad/TouchPad on macOS. Please ensure you meet the requirements before proceeding with this guide.
I2C Hardware
ChipsetmacOS Compatible Intel or AMD Chipset. See for more information
CPUIntel Haswell or Later. AMD Ryzen or later
macOS
  • OS X El Capitan and Later (Pre-installed).
Bootloader
  • Clover or OpenCore. Please ensure to use the latest version to avoid issues.
Kexts
  • Vanilla kexts in L/E and S/L/E
  • Lilu
  • VoodooI2C
  • Satellite
Tools
  • IOReg
  • OCAT or any equivalent .plist editor
  • MaciASL

Basic IASL knowledge.
In addition, a copy of Windows 10/11 must be installed prior to following this guide. If you're attempting a clean install or an upgrade, it is highly recommended to perform a clean install or the upgrade first before you follow this guide.

STEP 1: Determine the TrackPad and Touchpad Type
Prior to Broadwell, (a few Haswell as well), all the Laptops have PS/2 Trackpads and Touchscreen is on the USB Bus. Since SKL, nearly every Laptop's Trackpad and/or TouchPad is connected via I2C Bus. This is because if you want your TrackPad or TouchPad to work well on macOS, you must be aware of the particular device you have and whether your TrackPad or TouchPad is connected to the I2C Bus or the PS/2. After clarifying the device type, we have a clear goal and driving the TrackPad and/or TouchPad in an appropriate way according to the type of Trackpad and/or TouchPad becomes quite easy. It really does not makes sense to make the efforts blindly. Therefore, it is important to determine the device type.

Its quite simple to confirm whether your device is an I2C device or PS/2. Follow the steps below to determine the device type:

1. Install Windows 10/11 (if not already). You can also use Windows2Go if you don't want to directly install if the drive is formatted already. However, you'll need a USB Flash Drive or an External Drive with a good speed.
2. Install all the system drivers. The chipset drivers are must along with the Trackpad drivers.
3. Reboot the system to ensure the drivers are properly installed.
4. Check if your Trackpad is functional now. If not, check for the Hotkeys and ensure the Trackpad is not disabled.
5. Disconnect the external mouse (if connected).
6. Right click on This PC and select Manage
7. From the Computer Management Window, select Device Manager
8. Locate Human Interface Devices and expand it
9. If you see a device with the name "I2C HID Device", it means one or both of the device is an I2C Device. If you don't see any device with such name, provided that you've installed the drivers, that means your TrackPad and/or TouchPad is probably PS/2 or USB type.
10. In case if you have multiple I2C Device listed, you can verify each device connection type to ensure you're on right track. To check the connection, right click on the particular I2C HID Device name and select Properties. Then, from the Details Tab, select BIOS device name from the property drop-down list.

If you determine that your Trackpad or Touchpad is an I2C device and is in the compatibility support list, then you can proceed with this guide. It should be noted that for I2C USB devices, you can skip the rest of the steps described in this guide and can directly move to the installation steps. In case, if you determine that your device isn't I2C, then this guide is not for you. Please follow the guide linked below:


STEP 1: Setup BIOS​

The very first step is to set up BIOS to have the I2C Trackpad enabled on your system. This is because there are a few systems that have the option to Enable/Disable the I2C Device in BIOS which affects the functionality under macOS/OS X.

1. On your target computer, boot to BIOS. Refer to your user manual for the BIOS Key
2. Enable I2C Trackpad/Touchpad and/or Touchscreen function.
3. Save & Exit Setup.

STEP 2: Identify the I2C Device and Verify the I2C Function

Before you start to make an attempt to enable the I2C device under macOS, it is quite important that you identify the I2C Device and verify the I2C Function. This not only ensures that a particular device is functional and works as expected, so that you can verify it under macOS as well, but you'll also have the required information such as controller info, model, and the manufacturer info, which will be required at the time of enabling I2C device under macOS. It could be also possible that if a Laptop had a previous repair history (especially the I2C), it may not recognize or is faulty again and blindly following the guide under macOS may not yield the desired result. In case, the Laptop has a repair history, you must not skip this step as this step is very crucial. If you don't know whether the particular device is functinal under Windows, it is very difficult to diagnose later in macOS and re-installing Windows can be a big hassle if you do not have a spare disk to install Windows. Therefore, it is important to verify the function under Windows as it does not require any sort of modification to enable these devices. To identify and verify the I2C Device, follow the steps below:

1. Install Windows 10/11 (if not already)
2. Install all the system drivers. The chipset drivers are must along with the Trackpad drivers.
3. Reboot the system to ensure the drivers are properly installed.
4. Check if your Trackpad is functional now. If not, check for the Hotkeys and ensure the Trackpad is not disabled.
5. Disconnect the external mouse (if connected).
6. Right click on This PC and select Manage
7. From the Computer Management Window, select Device Manager
Locate Human Interface Devices and expand it
Find I2C HID Device and right click on I2C HID Device and click on Properties
Navigate to Details tab and look for BIOS Device Name under the property section.
Note down the BIOS Device Name. It will be required in the later steps.

STEP 3: Verify the I2C Device

The next step is to verify whether the I2C Controller is being detected under macOS or not. This step is required in order to ensure you're on the right track and you have the right controller as per the compatibility list. If the controller is not detected, even following the guide correctly will not help to get it recognized. In addition, not all I2C Controllers are supported. It could be also possible that if a Laptop had a previous repair history (especially the I2C), it may not recognized under macOS or is faulty again and it the Laptop has a repair history, you must verify the detection of the I2C Device. To verify the I2C Device detection, follow the steps below:

1. Download Hackintool.
2. Open Hackintool.
3. Locate your I2C Controller under the PCIe section in Hackintool. The I2C Controller is usually listed as a Network Controller under the Class and Subclass column.



Polling Mode
To enable the Trackpad in polling mode, follow the steps.

Add Windows patch

STEP X: Add Required Kexts
The next step is to install the required kexts in order to enable WiFi and Bluetooth support.
Download VoodooI2C
Extract Voodoo2C kexts
2. Mount your ESP.
3. Depending on your bootloader, copy the kexts accordingly:

For Clover:
If you're using Clover, copy VoodooI2C.kext and VoodooI2CHID.kext or one of the other Satellite kext (according to the make and model/manufacturer) to the EFI/Clover/Kext/Others directory.

For OpenCore:
If you're using OpenCore, copy VoodooI2C.kext and VoodooI2CHID.kext or one of the other Satellite kext (according to the make and model/manufacturer) to the EFI/OC/Kexts directory.

Open your config.plist and add VoodooI2C.kext and VoodooI2CHID.kext or one of the other Satellite kext entries in the Kernel>Add section of your config.plist. In addition, you'll need to ensure the kexts are in correct sorting order or one of the kext may fail to load despite its injected.


NOTES:
  • Please ensure the kexts are loading in the correct sorting order.
  • Download the latest version for better support.
  • Download only the RELEASE.zip file.
  • If the kext is already present in the directory, replace it with a new version
  • Do not use AirportBrcmFixup.kext.dSYM
  • Your kext list and entries may differ as each system is different and will have different requirements.
STEP X: Force Polling Mode
To use the I2C Device in polling mode, just installing the kext isn't sufficient. You also need the VoodooI2C property which enables the polling mode. The property can be added either using the Device Properties method or via boot arg. Depending on your preference, choose one, never both. To add the property, follow the steps below:

Using Device Properties


Using Boot Args
To force the poling mode using boot args, follow the steps below:

For Clover:
Open your config.plist and add -vi2c-force-polling in the Boot>Arguments section of your config.plist

For OpenCore:
1. Assuming the config.plist is still open, add -vi2c-force-polling to the boot-args key under the 7C436110-AB2A-4BBB-A880-FE41995C9F82 UUID list in the NVRAM section of your config.plist.

NOTE: Adding the property will enable all I2C Devices on the system. Therefore, adding the property on the particular Device path would be more preferred approach if the system has more than one I2C device and the other is incompatible under macOS or is not required.

3. Copy

GPIO Pinning

Install Windows 10/11 (if not already)
Install all the system drivers. The chipset drivers are must along with the Trackpad drivers.
Reboot the system to ensure the drivers are properly installed.
Check if your Trackpad is functional now. If not, check for the Hotkeys and ensure the Trackpad is not disabled.
Disconnect the external mouse (if connected).
Right click on This PC and select Manage
From the Computer Management Window, select Device Manager
Locate Human Interface Devices and expand it
Find I2C HID Device and right click on I2C HID Device and click on Properties
Navigate to Details tab and look for BIOS Device Name under the property section.
Note down the BIOS Device Name. It will be required in the later steps.


Manual pinning




Disable VoodooPS2 Plugins
You'll have to prevent VoodooPS2Mouse.kext and VoodooPS2Trackpad.kext from loading to avoid the conflict. This can be achieved either by (i) removing the kext entry to keep the config.plist more tidy or (ii) by removing the VoodooPS2Mouse.kext and VoodooPS2Trackpad.kext from the VoodooPS2Controller/Contents/Plugins directory. We only need the VoodooPS2Keyboard.kext as the Trackpad and the Touchscreen are mostly connected to the I2C bus. There can be exception where the Touch Screen is connected via I2C Bus and the Trackpad via PS/2. In such case, do not remove the VoodooPS2Mouse.kext and VoodooPS2Trackpad.kext plugin.

Disable Apple's I2C Kexts
To ensure there is no conflict with the Apple's I2C kexts, you'll have to block the Apple's I2C from loading.

NOTE: As of VoodooI2C v2.3 Release, it is no longer necessary to disable the Apple's I2C drivers to make VoodooI2C load. The above Kernel Patch is depreciated and is no longer required as the patches are



GPIO PINNING

STEP X: Identify the I2C ACPI ID
1. Install Windows 10/11 (if not already)
2. Install all the system drivers. The chipset drivers are must along with the Trackpad drivers.
3. Reboot the system to ensure the drivers are properly installed.
4. Check if your Trackpad is functional now. If not, check for the Hotkeys and ensure the Trackpad is not disabled.
5. Disconnect the external mouse (if connected).
6. Right click on This PC and select Manage
7. From the Computer Management Window, select Device Manager
Locate Human Interface Devices and expand it
Find I2C HID Device and right click on I2C HID Device and click on Properties
Navigate to Details tab and look for BIOS Device Name under the property section.
Note down the BIOS Device Name. It will be required in the later steps. Generally, the I2C device should be one of these (but not necessarily):

Touchpad:
TPDX, ELAN, SYNA, CYPR, TPAD, ETPD

Touchscreen:
TPLX, ELAN, ETPD, SYNA, ATML

Where, X represents a number.

In our case, its TPD1.


Now, go through each of the steps described below to see if they're applicable for your device(s).


STEP 1: Determining Interrupt Pinning Situation
The next step is to determine the interrupt pinning situation. To determine the interrupt pinning situation, follow the steps below:

1. Extract your native ACPI files.
2. Disassemble your ACPI files.
3. Open DSDT.dsl using MaciASL and click on Patch button.
4. Copy the code below and paste it in the Patch text box:
Code:
into_all method code_regex If\s+\([\\]?_OSI\s+\(\"Windows\s2015\"\)\) replace_matched begin If(LOr(_OSI("Darwin"),_OSI("Windows 2015"))) end;
5. Click on Apply to apply the Windows patch.
6. If your CPU is SKL or above, you would also need to apply the GPI0 controller patch:
Code:
into method label _STA parent_label GPI0 replace_content begin

Return (0x0F)

end;

7. Click on Close and click on Compile and look for errors in the Compiler Summary. If there's an error, fix it and again click on Compile.
8. Save the patched DSDT (as AML) using File>Save As option.
9. Copy the patched DSDT

2. Mount your EFI partition
3. Depending on your bootloader,

For Clover:
If you're using Clover, copy the patched DSDT to EFI/Clover/ACPI/patched directory. Ensure that the OEM DSDT is dropped.

For OpenCore:
If you're using OpenCore, copy patched DSDT and SSDTs to EFI/OC/ACPI directory. You'll also need to add the ACPI entries in ACPI>Add section of your config.plist

4. You can also use the following hotpatch if you don't prefer the static patching.

Once you're done with the above steps, you'll need to boot with the updated configuration. Simply restart your system. It is recommended to reset NVRAM twice at least.
Open IOReg and select IOACPIPlane.
Find the device with the "I2CX" name. Where, X is a number/alphabet.






Troubleshooting
Trackpad Preference not showing
There is a interesting corelation between the Battery status and the Trackpad on macOS. Although, the reason is unknown, enabling the battery status will enable the Trackpad preference.
Trackpad multi touch not working
Battery Drain
High CPU Usage
 
Last edited:

Forum statistics

Threads
1,881
Messages
17,440
Members
27,077
Latest member
saurabh kumar