Jump to content

[Guide] Enabling I2C Touchpad and Using Gestures on Intel 11th / 12th Gen Tiger Lake / Alder Lake Laptops. (Polling mode only)


shl628
 Share

2 posts in this topic

Recommended Posts

Hello. 🙂

Currently, VoodooI2C officially supports up to Intel 10th Gen Ice Lake's I2C Controllers.
But, even on an Intel 11th / 12th Gen Tiger Lake / Alder Lake laptop, if you add the PCI IDs corresponding to the I2C Controllers of the Intel 11th / 12th Gen Tiger Lake / Alder Lake system to the IOPCIMatch property of VoodooI2CPCILakeController in VoodooI2C's Info.plist, VoodooI2C is loaded to activate the I2C touchpad in polling mode, and gestures can also be used normally. ✨

image.png.41c5cef47dfee85dae53adc64af74d2c.png

 

https://github.com/VoodooI2C/VoodooI2C/issues/478

 

Intel 12th Gen Alder Lake has a case of operating in the same way as above in VoodooI2C's Gitter.

image.png.13c72db6ce31f18af96672b15891de32.png

 

https://gitter.im/alexandred/VoodooI2C?at=63933e684a6ed513834c45c2

 

 

Patching VoodooI2C's Info.plist

 

1. Open Info.plist of VoodooI2C with an app such as a text editor and find the VoodooI2CPCILakeController part at the bottom.

image.png.fe8e9191253f1ff6950c7d38eb822e51.png

 

2. Add the PCI IDs of the I2C Controller to the IOPCIMatch property.

  • For Intel 11th Gen Tiger Lake : Add 0xa0e88086&0xFFFCFFFF
  • For Intel 12th Gen Alder Lake : Add 0x51e88086&0xFFFCFFFF

image.png.6c8148b2ac1fef696ea1c7cebb1a2dc7.png

 

3. Add -vi2c-force-polling boot arg to boot-args in NVRAM - Add of Config.plist.
Alternatively, you can also add force-polling = 01000000 (Data) property to I2C devices such as I2C0 / I2C1 / I2C2 / I2C3 / ... to which the I2C touchpad is connected in Device Properties of Config.plist.

 

 

Enabling I2C Touchpad and Setting Gestures

 

If you reboot after completing all the above tasks, the I2C touchpad will be activated and all gestures will work normally.
image.png.da62589af4d740fa782b84c02bb1a150.png

 

image.png.c63e718a0d8366065d832ed03e666e15.png

 

image.png.3fbc295fe4e01da70cf2765c4b2529cb.png

 

In IOReg, I can see that Kext related to VoodooI2C is loaded in SPTP Device, an I2C touchpad device of Samsung notebook.

image.thumb.png.055fb391ad9adf222924d80f1e0af371.png

 

However, Intel 11th & 12th Gen Tiger Lake & Alder Lake systems are still only available in polling mode.
This is because VoodooI2C itself is loaded, but VoodooGPIO is not supported.
I tried to modify IONameMatch of VoodooGPIOIceLakeLP in VoodooGPIO's Info.plist to INT34C5, which is the value corresponding to the GPIO Controller (GPI0 Device) of the Intel 11th Gen Tiger Lake system.

image.png.5b88b1fe3653c12778bee15443b4ac10.png

 

In the IOReg, the VoodooGPIOIceLakeLP is loaded in the GPI0 Device, but the touchpad does not work.
I guess the Interrupt (GPIO) mode is difficult to use because the calculation of the GPIO pin values is different from the Ice Lake system.

image.thumb.png.10e83025c578a4579e2c77adf72032fd.png

 

P.S.

Support for AMD and TigerLake-LP seems to be added in VoodooI2C Ver 2.9

image.png.8cbc6eb9e9f8d6de6680e3ce886f3dbd.png

 

https://github.com/VoodooI2C/VoodooI2C/pull/532

https://github.com/VoodooI2C/VoodooI2C/pull/530

https://github.com/VoodooI2C/VoodooGPIO/pull/13

https://github.com/VoodooI2C/VoodooGPIO/pull/14

Edited by shl628
  • Like 1
Link to comment
Share on other sites

I tried using the CI build with VoodooI2C.kext with Tiger Lake-LP GPIO Support, but the following log was displayed.

  • Couldn't alloc class "VoodooGPIOTigerLakeLP"

 

I modified the following items in VoodooI2C.kext

 

1. Intel 11th Gen Tiger Lake's I2C Controllers PCI IDs were not added to VoodooI2C.kext's Info.plist, so I added 0xa0e88086&0xFFFCFF.

2. In Info.plist in VoodooGPIO.kext, INTC1055 is defined in VoodooGPIOTigerLakeLP.
But, the IOName of my laptop's GPIO device is INT34C5.
So, I added INT34C5.

image.png.e2127f5378fe12946ea34ed8f8ea3d4e.png

 

As a result, it works in Polling mode.
However, it does not work in Interrupt (GPIO) mode due to an error called "Couldn't alloc class VoodooGPIOTigerLakeLP".

Couldn't alloc class "VoodooGPIOTigerLakeLP"
VoodooI2CPCILakeController::pci8086,a0e9 Starting I2C controller
VoodooI2CPCILakeController::pci8086,a0e9 Set PCI power state D0
VoodooI2CPCILakeController::pci8086,a0e9 Current CPU is Comet Lake or Ice Lake, patching...
VoodooI2CPCILakeController::pci8086,a0e9 Publishing nub
VoodooI2CPCILakeController::pci8086,a0e8 Starting I2C controller
VoodooI2CPCILakeController::pci8086,a0e8 Set PCI power state D0
VoodooI2CPCILakeController::pci8086,a0e8 Current CPU is Comet Lake or Ice Lake, patching...
VoodooI2CPCILakeController::pci8086,a0e8 Publishing nub
VoodooI2CControllerDriver::pci8086,a0e8 Probing controller
VoodooI2CControllerDriver::pci8086,a0e8 Found valid Synopsys component, continuing with initialisation
VoodooI2CControllerDriver::pci8086,a0e8 Got bus configuration values
VoodooI2CControllerDriver::pci8086,a0e8 Publishing device nubs
VoodooI2CControllerDriver::pci8086,a0e8 Found I2C device: ELAN0B00
VoodooI2CControllerDriver::pci8086,a0e9 Probing controller
VoodooI2CControllerDriver::pci8086,a0e9 Found valid Synopsys component, continuing with initialisation
VoodooI2CPCILakeController::pci8086,a0eb Starting I2C controller
VoodooI2CPCILakeController::pci8086,a0eb Set PCI power state D0
VoodooI2CPCILakeController::pci8086,a0eb Current CPU is Comet Lake or Ice Lake, patching...
VoodooI2CPCILakeController::pci8086,a0eb Publishing nub
VoodooI2CControllerDriver::pci8086,a0eb Probing controller
VoodooI2CControllerDriver::pci8086,a0eb Found valid Synopsys component, continuing with initialisation
VoodooI2CDeviceNub::SPTP Found valid resources from _CRS method
VoodooI2CDeviceNub::SPTP Returned index 0x0 from _DSM or XDSM method is not supported
VoodooI2CDeviceNub::SPTP Could not retrieve resources from _DSM or XDSM method
VoodooI2CDeviceNub::SPTP Forced polling mode, skipping GPIO interrupts
VoodooI2CControllerDriver::pci8086,a0e9 Got bus configuration values
VoodooI2CControllerDriver::pci8086,a0eb Got bus configuration values
VoodooI2CControllerDriver::pci8086,a0e9 Publishing device nubs
VoodooI2CControllerDriver::pci8086,a0eb Publishing device nubs
VoodooI2CHIDDevice:0x1000003a6 start
VoodooI2CHIDDevice::ELAN0B00 Warning: Could not get interrupt event source, using polling instead
VoodooI2CHIDDevice::ELAN0B00 Device initiated reset accomplished
VoodooI2CHIDDevice:0x1000003a6 creating interfaces
IOHIDInterface:0x1000003d5 start for VoodooI2CHIDDevice:0x1000003a6
VoodooI2CPrecisionTouchpadHIDEventDriver:0x1000003d6 start
VoodooI2CHIDDevice:0x1000003a6 open by VoodooI2CPrecisionTouchpadHIDEventDriver:0x1000003d6 (0x0)
VoodooI2CPrecisionTouchpadHIDEventDriver::ELAN0B00 Putting device into Precision Touchpad Mode
ApplePS2Controller: Notification consumer published: VoodooI2CPrecisionTouchpadHIDEventDriver
VoodooI2CHIDDevice:0x1000003a6 Matching has vendor DeviceUsagePage : ff0c bundleIdentifier com.apple.AppleUserHIDDrivers ioclass AppleUserHIDEventService but transport and vendorID is missing
VoodooI2CHIDDevice:0x1000003a6 Matching has vendor DeviceUsagePage : ff0c bundleIdentifier com.apple.AppleUserHIDDrivers ioclass AppleUserHIDEventService but transport and vendorID is missing
Sandbox apply: distnoted[412] <bytes>Sandbox apply: calaccessd[415] <bytes>1 duplicate report for Sandbox: secd(389) deny(1) user-preference-write secdSandbox: secd(389) deny(1) mach-lookup com.apple.lsd.mapdbVoodooI2CPrecisionTouchpadHIDEventDriver::setProperties USBMouseStopsTrackpad = 0
Edited by shl628
Link to comment
Share on other sites

 Share

×
×
  • Create New...