shl628 Posted August 8, 2023 Share Posted August 8, 2023 (edited) 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. ✨  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.  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.  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  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.    In IOReg, I can see that Kext related to VoodooI2C is loaded in SPTP Device, an I2C touchpad device of Samsung notebook.  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.  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.  P.S. Support for AMD and TigerLake-LP seems to be added in VoodooI2C Ver 2.9  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 August 8, 2023 by shl628 3 Link to comment Share on other sites More sharing options...
shl628 Posted August 9, 2023 Author Share Posted August 9, 2023 (edited) 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.  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 August 9, 2023 by shl628 Link to comment Share on other sites More sharing options...
Chito Kim Posted May 30 Share Posted May 30 It might be an elementary question, but how do I get error logs about the VoodooI2C.kext? Is it a opencore verbose log, or log show thing or something? I'm trying to get GPIO interruption on AMD laptop trackpad. It works flawlessly with polling mode. Link to comment Share on other sites More sharing options...
shl628 Posted May 30 Author Share Posted May 30 7 hours ago, Kim Chito said: It might be an elementary question, but how do I get error logs about the VoodooI2C.kext? Is it a opencore verbose log, or log show thing or something? I'm trying to get GPIO interruption on AMD laptop trackpad. It works flawlessly with polling mode. Â After adding DebugEnhancer.kext and rebooting, you can check by running the command below in the terminal. sudo dmesg | grep -i "Voodoo" Link to comment Share on other sites More sharing options...
Recommended Posts