Contribute
Register

[Guide] ASUS ZenBook Pro Duo 15 OLED UX582 OpenCore

@gvkt Good news. I followed @sqlsec's equation and seems to get the GPIO pin work. Looks like CometLake H CPUs have the same calculation as CoffeeLake-LF CPUs.

CannolLake H CPU can try the following formula to calculate GPIO Pin

Code:
If APICPIN > 47 And APICPIN <= 71 Then
    GPIOPIN = APICPIN - 16
    GPIOPIN2 = APICPIN + 240
    If APICPIN > 47 And APICPIN <= 59 Then GPIOPIN3 = APICPIN + 304
ElseIf APICPIN > 71 And APICPIN <= 95 Then
    GPIOPIN = APICPIN - 8
    GPIOPIN3 = APICPIN + 152
    GPIOPIN2 = APICPIN + 120
ElseIf APICPIN > 95 And APICPIN <= 119 Then
    GPIOPIN = APICPIN 
If APICPIN > 108 And APICPIN <= 115 Then
      GPIOPIN2 = APICPIN + 20
End If

According to @sqlsec, for CoffeeLake-LF (Intel 8 Gen) and Whiskylake CPUs:

If APICPIN > 47 And APICPIN <= 71 Then
GPIOPIN = APICPIN - 16
GPIOPIN2 = APICPIN + 80
ElseIf APICPIN > 71 And APICPIN <= 95 Then
GPIOPIN2 = APICPIN + 184
GPIOPIN = APICPIN + 88
ElseIf APICPIN > 95 And APICPIN <= 119 Then
GPIOPIN = APICPIN
ElseIf APICPIN > 108 And APICPIN <= 115 Then
GPIOPIN2 = APICPIN - 44
End If

For other CPUs:
Skylake (Intel 6 Gen):
If APICPIN > 47 And APICPIN <= 79 Then
GPIOPIN = APICPIN - 24
GPIOPIN2 = APICPIN + 72
ElseIf APICPIN > 79 And APICPIN <= 119 Then
GPIOPIN = APICPIN - 24
End If
CoffeeLake-H (Intel 8 Gen):
If APICPIN > 47 And APICPIN <= 71 Then
GPIOPIN = APICPIN - 16
GPIOPIN2 = APICPIN + 240
If APICPIN > 47 And APICPIN <= 59 Then GPIOPIN3 = APICPIN + 304
ElseIf APICPIN > 71 And APICPIN <= 95 Then
GPIOPIN = APICPIN - 8
GPIOPIN3 = APICPIN + 152
GPIOPIN2 = APICPIN + 120
ElseIf APICPIN > 95 And APICPIN <= 119 Then
GPIOPIN = APICPIN
If APICPIN > 108 And APICPIN <= 115 Then
GPIOPIN2 = APICPIN + 20
End If


For my UX582, ETPD has the APICPIN being 5F; converting to decimal makes it 95. Hence,
GPIOPIN2 = APICPIN + 184 = 279 = 0x117
GPIOPIN = APICPIN + 88 = 0xB7

I tried both 0xB7 and 0x117; only 0x117 works for my trackpad (without Trackpad being disabled with your SSDT and OC ACPI config patches). I assume this means it's working in GPIO mode? Let me know if this equation works for you too.
Screen Shot 2021-12-29 at 12.12.46 PM.png

Also, is it possible (necessary) to set the touchscreen to GPIO mode at the same time?
 
Last edited:
@gvkt Good news. I followed @sqlsec's equation and seems to get the GPIO pin work. Looks like CometLake H CPUs have the same calculation as CoffeeLake-LF CPUs.

No, sorry. It is polling. If you have extended debugging on you will see a message like this in dmesg for your Elan device. Same thing could be happening with @sqlsec as well for all I know. The Voodoo code updates the IORegistry before the GPIO pinning is known to have succeeded.

[ 1.501214]: VoodooGPIOCannonLakeH::Failed getting hardware pin for GPIO pin 279VoodooI2CHIDDevice::GDX1515 Warning: Could not get interrupt event source, using polling instead

The above is with 0x117

This happens for many of the incorrect pins. This is why I posted the issue on Voodoo GitHub
 
@gvkt How do you check the log to see whether it is polling or GPIO?
 
Somehow I am able to get the log from dmesg now. I checked the log, and unfortunately, you're right. The trackpad (ELAN1406) is still in polling mode; however, it has found valid GPIO interrupts:
Code:
[   49.864579]: VoodooI2CDeviceNub::ETPD Found valid resources from _CRS method
[   49.864658]: VoodooI2CDeviceNub::ETPD Returned index 0x0 from _DSM or XDSM method is not supported
[   49.864666]: VoodooI2CDeviceNub::ETPD Could not retrieve resources from _DSM or XDSM method
[   49.864678]: VoodooI2CDeviceNub::ETPD Found valid GPIO interrupts
[   49.864839]: VoodooI2CDeviceNub::ETPD Got GPIO Controller! VoodooGPIOCannonLakeH
[  50.366579]: VoodooGPIOCannonLakeH::Failed getting hardware pin for GPIO pin 279VoodooI2CHIDDevice::ELAN1406 Warning: Could not get interrupt event source, using polling instead

I also found another I2C device (ALED, PNP0C50, ALED0217) is in polling mode as well. I suspect it is the Windows Hello IR Camera or the RGB led, and maybe it is consuming power as well? Do you also have this device?
Code:
[   50.364973]: VoodooI2CControllerDriver::pci8086,6e9 Found I2C device: ALED0217
[   50.365107]: VoodooI2CDeviceNub::ALED Found valid resources from _CRS method
[   50.365210]: VoodooI2CDeviceNub::ALED Returned index 0x0 from _DSM or XDSM method is not supported
[   50.365214]: VoodooI2CDeviceNub::ALED Could not retrieve resources from _DSM or XDSM method
[   50.365223]: VoodooI2CDeviceNub::ALED Warning: Incompatible APIC interrupt pin (0x3f > 0x2f)
[   50.365230]: VoodooI2CDeviceNub::ALED Warning: Could not find any APIC nor GPIO interrupts. Your chosen satellite will run in polling mode if implemented.

It looks like my main touchscreen (ELAN9008) and my screenpad (ELAN9009) are in APIC mode. I guess I am luck to have the touchscreens with GPIO pins<0x2F (0x1B and 0x1C).
Code:
[   49.859014]: VoodooI2CControllerDriver::pci8086,6eb Found I2C device: ELAN9009
[   49.859022]: VoodooI2CControllerDriver::pci8086,6ea Probing controller
[   49.859056]: VoodooI2CControllerDriver::pci8086,6ea Found valid Synopsys component, continuing with initialisation
[   49.859521]: VoodooI2CDeviceNub::TPL1 Found valid resources from _CRS method
[   49.859671]: VoodooI2CControllerDriver::pci8086,6ea Got bus configuration values
[   49.859700]: VoodooI2CDeviceNub::TPL1 Returned index 0x0 from _DSM or XDSM method is not supported
[   49.859706]: VoodooI2CDeviceNub::TPL1 Could not retrieve resources from _DSM or XDSM method
[   49.859712]: VoodooI2CDeviceNub::TPL1 Found valid APIC interrupt pin (0x1c)
[   49.859725]: VoodooI2CControllerDriver::pci8086,6ea Publishing device nubs
[   49.859752]: VoodooI2CControllerDriver::pci8086,6ea Found I2C device: ELAN9008
[   49.859854]: VoodooI2CDeviceNub::TPL0 Found valid resources from _CRS method
[   49.859914]: VoodooI2CDeviceNub::TPL0 Returned index 0x0 from _DSM or XDSM method is not supported
[   49.859917]: VoodooI2CDeviceNub::TPL0 Could not retrieve resources from _DSM or XDSM method
[   49.859922]: VoodooI2CDeviceNub::TPL0 Found valid APIC interrupt pin (0x1b)

The full log is in here:
Code:
Last login: Thu Dec 30 07:17:50 on ttys001
username@MBP ~ % sudo dmesg | grep Voodoo
Password:
[   49.780018]: System Policy: fseventsd(94) allow file-read-metadata /private/var/folders/ny/1y3gs2g95b7fcs4_tss4mds00000gn/0/com.apple.nsurlsessiond/E8C9768780A371F36651AB699D884E881706B377/E78565424EEC8F8811BF049B7B9DFD98CD4AA831System Policy: fseventsd(94) allow file-read-metadata /private/var/folders/ny/1y3gs2g95b7fcs4_tss4mds00000gn/0/com.apple.nsurlsessiond/E8C9768780A371F36651AB699D884E881706B377/E78565424EEC8F8811BF049B7B9DFD98CD4AA831KextLog: AuxKC bundle org.coolstar.VoodooGPIO marked as loadable
[   49.848079]: VoodooGPIOCannonLakeH::Loading GPIO Data for CannonLake-H
[   49.848098]: VoodooGPIOCannonLakeH::VoodooGPIO Init!
[   49.848100]: VoodooGPIOCannonLakeH::VoodooGPIO Initializing Community 0
[   49.848156]: VoodooGPIOCannonLakeH::VoodooGPIO Initializing Community 1
[   49.848205]: VoodooGPIOCannonLakeH::VoodooGPIO Initializing Community 2
[   49.848219]: KextLog: AuxKC bundle com.alexandred.VoodooI2C marked as loadable
[   49.848255]: VoodooGPIOCannonLakeH::VoodooGPIO Initializing Community 3
[   49.848613]: VoodooGPIOCannonLakeH::GPIO Controller is already awake! Not reinitializing.
[   49.853309]: KextLog: AuxKC bundle com.alexandred.VoodooI2CHID marked as loadable
[   49.856784]: KextLog: AuxKC bundle com.alexandred.VoodooI2CServices marked as loadable
[   49.857669]: VoodooI2CPCILakeController::pci8086,6eb Starting I2C controller
[   49.857724]: VoodooI2CPCILakeController::pci8086,6eb Set PCI power state D0
[   49.857730]: VoodooI2CPCILakeController::pci8086,6eb Current CPU is Comet Lake or Ice Lake, patching...
[   49.857750]: VoodooI2CPCILakeController::pci8086,6ea Starting I2C controller
[   49.857757]: VoodooI2CPCILakeController::pci8086,6eb Publishing nub
[   49.857824]: VoodooI2CPCILakeController::pci8086,6ea Set PCI power state D0
[   49.857826]: VoodooI2CPCILakeController::pci8086,6e9 Starting I2C controller
[   49.857829]: VoodooI2CPCILakeController::pci8086,6ea Current CPU is Comet Lake or Ice Lake, patching...
[   49.857830]: VoodooI2CPCILakeController::pci8086,6e8 Starting I2C controller
[   49.857851]: VoodooI2CPCILakeController::pci8086,6ea Publishing nub
[   49.857942]: KextLog: AuxKC bundle me.kishorprins.VoodooInput marked as loadable
[   49.858129]: VoodooI2CPCILakeController::pci8086,6e9 Set PCI power state D0
[   49.858132]: VoodooI2CPCILakeController::pci8086,6e8 Set PCI power state D0
[   49.858136]: VoodooI2CPCILakeController::pci8086,6e9 Current CPU is Comet Lake or Ice Lake, patching...
[   49.858141]: VoodooI2CPCILakeController::pci8086,6e8 Current CPU is Comet Lake or Ice Lake, patching...
[   49.858159]: VoodooI2CPCILakeController::pci8086,6e9 Publishing nub
[   49.858165]: VoodooI2CPCILakeController::pci8086,6e8 Publishing nub
[   49.858203]: VoodooI2CControllerDriver::pci8086,6eb Probing controller
[   49.858214]: VoodooI2CControllerDriver::pci8086,6eb Found valid Synopsys component, continuing with initialisation
[   49.858805]: VoodooI2CControllerDriver::pci8086,6eb Got bus configuration values
[   49.859005]: VoodooI2CControllerDriver::pci8086,6eb Publishing device nubs
[   49.859014]: VoodooI2CControllerDriver::pci8086,6eb Found I2C device: ELAN9009
[   49.859022]: VoodooI2CControllerDriver::pci8086,6ea Probing controller
[   49.859056]: VoodooI2CControllerDriver::pci8086,6ea Found valid Synopsys component, continuing with initialisation
[   49.859521]: VoodooI2CDeviceNub::TPL1 Found valid resources from _CRS method
[   49.859671]: VoodooI2CControllerDriver::pci8086,6ea Got bus configuration values
[   49.859700]: VoodooI2CDeviceNub::TPL1 Returned index 0x0 from _DSM or XDSM method is not supported
[   49.859706]: VoodooI2CDeviceNub::TPL1 Could not retrieve resources from _DSM or XDSM method
[   49.859712]: VoodooI2CDeviceNub::TPL1 Found valid APIC interrupt pin (0x1c)
[   49.859725]: VoodooI2CControllerDriver::pci8086,6ea Publishing device nubs
[   49.859752]: VoodooI2CControllerDriver::pci8086,6ea Found I2C device: ELAN9008
[   49.859854]: VoodooI2CDeviceNub::TPL0 Found valid resources from _CRS method
[   49.859914]: VoodooI2CDeviceNub::TPL0 Returned index 0x0 from _DSM or XDSM method is not supported
[   49.859917]: VoodooI2CDeviceNub::TPL0 Could not retrieve resources from _DSM or XDSM method
[   49.859922]: VoodooI2CDeviceNub::TPL0 Found valid APIC interrupt pin (0x1b)
[   49.862837]: VoodooI2CControllerDriver::pci8086,6e9 Probing controller
[   49.862847]: VoodooI2CControllerDriver::pci8086,6e9 Found valid Synopsys component, continuing with initialisation
[   49.863130]: VoodooI2CControllerDriver::pci8086,6e8 Probing controller
[   49.863140]: VoodooI2CControllerDriver::pci8086,6e8 Found valid Synopsys component, continuing with initialisation
[   49.864104]: VoodooI2CControllerDriver::pci8086,6e9 Got bus configuration values
[   49.864187]: VoodooI2CControllerDriver::pci8086,6e9 Publishing device nubs
[   49.864201]: VoodooI2CControllerDriver::pci8086,6e9 Found I2C device: ELAN1406
[   49.864376]: VoodooI2CHIDDevice:0x1000008eb start
[   49.864539]: VoodooI2CHIDDevice:0x1000008ee start
[   49.864579]: VoodooI2CDeviceNub::ETPD Found valid resources from _CRS method
[   49.864584]: VoodooI2CControllerDriver::pci8086,6e8 Got bus configuration values
[   49.864656]: VoodooI2CControllerDriver::pci8086,6e8 Publishing device nubs
[   49.864658]: VoodooI2CDeviceNub::ETPD Returned index 0x0 from _DSM or XDSM method is not supported
[   49.864664]: VoodooI2CControllerDriver::pci8086,6e8 Found I2C device: INT3515
[   49.864666]: VoodooI2CDeviceNub::ETPD Could not retrieve resources from _DSM or XDSM method
[   49.864678]: VoodooI2CDeviceNub::ETPD Found valid GPIO interrupts
[   49.864839]: VoodooI2CDeviceNub::ETPD Got GPIO Controller! VoodooGPIOCannonLakeH
[   49.864939]: VoodooI2CDeviceNub::UCMX Found valid resources from _CRS method
[   49.864972]: VoodooI2CDeviceNub::UCMX Could not find suitable _DSM or XDSM method
[   49.864976]: VoodooI2CDeviceNub::UCMX Could not retrieve resources from _DSM or XDSM method
[   49.864989]: VoodooI2CDeviceNub::UCMX Found valid GPIO interrupts
[   49.865147]: VoodooI2CDeviceNub::UCMX Got GPIO Controller! VoodooGPIOCannonLakeH
[   49.967876]: VoodooI2CHIDDevice::ELAN9008 Device initiated reset accomplished
[   49.968117]: VoodooI2CHIDDevice::ELAN9009 Device initiated reset accomplished
[   50.092578]: VoodooI2CHIDDevice:0x1000008eb creating interfaces
[   50.094521]: VoodooI2CHIDDevice:0x1000008eb Matching has vendor DeviceUsagePage : ff0c bundleIdentifier com.apple.AppleUserHIDDrivers ioclass AppleUserHIDEventService but transport and vendorID is missing
[   50.096275]: VoodooI2CTouchscreenHIDEventDriver:0x1000008f7 start
[   50.096636]: VoodooInputSimulatorDevice:0x1000008ff start
[   50.108760]: VoodooI2CHIDDevice:0x1000008ee creating interfaces
[   50.110248]: VoodooI2CHIDDevice:0x1000008ee Matching has vendor DeviceUsagePage : ff0c bundleIdentifier com.apple.AppleUserHIDDrivers ioclass AppleUserHIDEventService but transport and vendorID is missing
[   50.111909]: VoodooI2CTouchscreenHIDEventDriver:0x100000903 start
[   50.112367]: VoodooInputSimulatorDevice:0x10000090b start
[   50.118307]: open by VoodooI2CTouchscreenHIDEventDriver 0x100000903 (0x0)
[   50.120046]: VoodooI2CTouchscreenHIDEventDriver::Got active display
[   50.120052]: VoodooI2CTouchscreenHIDEventDriver::Got active framebuffer
[   50.121344]: VoodooInputActuatorDevice:0x100000910 start
[   50.122550]: VoodooInputSimulatorDevice:0x10000090b creating interfaces
[   50.123678]: VoodooInputActuatorDevice:0x100000910 creating interfaces
[   50.125494]: VoodooInputSimulatorDevice:0x10000090b Matching has vendor DeviceUsagePage : ff0c bundleIdentifier com.apple.AppleUserHIDDrivers ioclass AppleUserHIDEventService but transport and vendorID is missing
[   50.128814]: VoodooI2CTouchscreenHIDEventDriver::setProperties USBMouseStopsTrackpad = 0
[   50.267956]: open by VoodooI2CTouchscreenHIDEventDriver 0x1000008f7 (0x0)
[   50.267999]: VoodooI2CTouchscreenHIDEventDriver::Got active display
[   50.268024]: VoodooI2CTouchscreenHIDEventDriver::Got active framebuffer
[   50.269861]: VoodooInputActuatorDevice:0x10000092d start
[   50.270844]: VoodooInputSimulatorDevice:0x1000008ff creating interfaces
[   50.272230]: VoodooI2CTouchscreenHIDEventDriver::setProperties USBMouseStopsTrackpad = 0
[   50.272270]: VoodooInputActuatorDevice:0x10000092d creating interfaces
[   50.273416]: VoodooInputSimulatorDevice:0x1000008ff Matching has vendor DeviceUsagePage : ff0c bundleIdentifier com.apple.AppleUserHIDDrivers ioclass AppleUserHIDEventService but transport and vendorID is missing
[   50.364973]: VoodooI2CControllerDriver::pci8086,6e9 Found I2C device: ALED0217
[   50.365107]: VoodooI2CDeviceNub::ALED Found valid resources from _CRS method
[   50.365210]: VoodooI2CDeviceNub::ALED Returned index 0x0 from _DSM or XDSM method is not supported
[   50.365214]: VoodooI2CDeviceNub::ALED Could not retrieve resources from _DSM or XDSM method
[   50.365223]: VoodooI2CDeviceNub::ALED Warning: Incompatible APIC interrupt pin (0x3f > 0x2f)
[   50.365230]: VoodooI2CDeviceNub::ALED Warning: Could not find any APIC nor GPIO interrupts. Your chosen satellite will run in polling mode if implemented.
[   50.365582]: System Policy: fseventsd(94) allow file-read-metadata /private/var/folders/ny/1y3gs2g95b7fcs4_tss4mds00000gn/0/com.apple.nsurlsessiond/E8C9768780A371F36651AB699D884E881706B377/E78565424EEC8F8811BF049B7B9DFD98CD4AA831/tasks.plistSystem Policy: fseventsd(94) allow file-read-metadata /private/var/folders/ny/1y3gs2g95b7fcs4_tss4mds00000gn/0/com.apple.nsurlsessiond/E8C9768780A371F36651AB699D884E881706B377/E78565424EEC8F8811BF049B7B9DFD98CD4AA831/tasks.plistSystem Policy: fseventsd(94) allow file-read-metadata /private/var/folders/ny/1y3gs2g95b7fcs4_tss4mds00000gn/0/com.apple.nsurlsessiond/E8C9768780A371F36651AB699D884E881706B377/E78565424EEC8F8811BF049B7B9DFD98CD4AA831/tasks.plistSystem Policy: fseventsd(94) allow file-read-metadata /private/var/folders/ny/1y3gs2g95b7fcs4_tss4mds00000gn/0/com.apple.nsurlsessiond/E8C9768780A371F36651AB699D884E881706B377/E78565424EEC8F8811BF049B7B9DFD98CD4AA831/tasks.plistVoodooI2CHIDDevice:0x100000945 start
[  50.366579]: VoodooGPIOCannonLakeH::Failed getting hardware pin for GPIO pin 279VoodooI2CHIDDevice::ELAN1406 Warning: Could not get interrupt event source, using polling instead
[   50.367814]: VoodooI2CHIDDevice:0x100000946 start
[   50.367843]: VoodooI2CHIDDevic e::ALED0217 Warning: Could not get interrupt event source, using polling instead
[   50.546575]: Sandbox: symptomsd-diag(377) deny(1) mach-lookup com.apple.backupd.sandbox.xpcSandbox: symptomsd-diag(377) deny(1) mach-lookup com.apple.metadata.mdsVoodooI2CHIDDevice::ELAN1406 Device initiated reset accomplished
[   50.568568]: VoodooI2CHIDDevice::ALED0217 Device initiated reset accomplished
[   50.681703]: VoodooI2CHIDDevice:0x100000945 creating interfaces
[   50.682771]: VoodooI2CHIDDevice:0x100000946 creating interfaces
[   50.683944]: VoodooI2CHIDDevice:0x100000945 Matching has vendor DeviceUsagePage : ff0c bundleIdentifier com.apple.AppleUserHIDDrivers ioclass AppleUserHIDEventService but transport and vendorID is missing
[   50.687767]: VoodooI2CPrecisionTouchpadHIDEventDriver:0x100000953 start
[   50.688421]: VoodooInputSimulatorDevice:0x10000095a start
[   50.708905]: open by VoodooI2CPrecisionTouchpadHIDEventDriver 0x100000953 (0x0)
[   50.708971]: VoodooI2CPrecisionTouchpadHIDEventDriver::ELAN1406 Putting device into Precision Touchpad Mode
[   50.711489]: VoodooInputActuatorDevice:0x10000095d start
[   50.712208]: VoodooInputSimulatorDevice:0x10000095a creating interfaces
[   50.713015]: VoodooInputActuatorDevice:0x10000095d creating interfaces
[   50.714246]: VoodooInputSimulatorDevice:0x10000095a Matching has vendor DeviceUsagePage : ff0c bundleIdentifier com.apple.AppleUserHIDDrivers ioclass AppleUserHIDEventService but transport and vendorID is missing
[   50.720824]: AsusSMC    notify: @ Notification consumer published: VoodooI2CPrecisionTouchpadHIDEventDriver
[   50.721249]: ApplePS2Controller: Notification consumer published: VoodooI2CPrecisionTouchpadHIDEventDriver
[   50.727735]: VoodooI2CPrecisionTouchpadHIDEventDriver::setProperties USBMouseStopsTrackpad = 0
 
Last edited:
I also tested the following pins and found out 0x5F, 0x97, and 0x117 are the gpio pin number that work (but in polling mode) with the SSDT patch.
0x4A
0x57
0x5F
0x60
0x67
0x77
0x87
0x97
0xA7
0xB7
0xC7
0xD7
0xE7
0xF7
0x107
0x117
0x127
 
For anyone who is following this thread, I have tested the thunderbolt on UX582 with Intel X540 10G Ethernet Card. It seems to be work OOB with the current OpenCore EFI. Hotplug also works well on the laptop.
 
The problem with USB2 device on USB-A slot solved by disabling the XhciPortLimit quirk in config.plist (Monterey 12.0.1)

Thank You all for good work!
 
Last edited:
The problem with USB2 device on USB-A slot solved by disabling the XhciPortLimit quirk in config.plist (Monterey 12.0.1)

Thank You all for good work!
Yes it works well after removing that quirk. Will update the Github repo.
 
Yes it works well after removing that quirk. Will update the Github repo.
Unfortunately, it does't work on Monterey 12.1:(

I solve it by remapping USB ports from scratch.
I try new (for me) method using USBToolBox utility from GitHub, and it works perfect.
I done it using natively booted Windows 10. Just use manual from repo.
 
Back
Top