Contribute
Register

[Guide] Asus UX305CA UHD

Status
Not open for further replies.
The v2.0 drivers for the trackpad are out, and supposedly they fix issues with the mouse no longer working after sleep mode, along with adding new gesture compatibility.

I tried simply replacing the older kext (using the same DSDT edits) with VoodooI2C.kext and VoodooI2CELAN (and also tried VoodooI2C / VoodooI2CHID), but that didn't work. I thought there was a shot. :)

Anybody able to post new instructions for version 2.0 installation? Their web site has a lot of gibberish (at least to me), and would be good to add these instructions to the installation notes in the top post.

https://github.com/alexandred/VoodooI2C/
 
I just did it for UX305CA and got it to work.

Requirements:
1. Ability to patch DSDT (without it - don't even bother - you cannot succeed) - MaciASL (Rehabman version used here)
2. Having your DSDT.dsl for actual working hackintosh (patched properly)
3. It is easier when you can identify ACPI device ID used by your touchpad (in my case: ETPD) - easiest in Windows (as per : https://voodooi2c.github.io/#GPIO Pinning/GPIO Pinning )

Guide:
1. Delete old VoodooI2C.kext, rebuild cache, reboot
2. Add VoodooI2C-Patches repo to MaciASL
3. Load your DSDT.dsl and ensure you patched it with Windows OS patch (I've used Windows 10)
4. Save, Compile, save to /EFI/Clover/ACPI/patched/DSDT.AML (!) as binary compiled ACPI-ML (not *.DSL - obviously), reboot
5. Load again your DSDT.dsl and patch with I2C Controllers [SKL] patch
6. repeat 4.
7. Load again DSDL.dsl and patch with GPIO Controller Enable patch
8. repeat 4.
(those repetitions are to ensure everything is bootable after each patch)
9. Now the hard work to check Touchpad device pinning to GPIO - you need to follow strictly and pedantically GPIO Pinning tutorial. (https://voodooi2c.github.io/#GPIO Pinning/GPIO Pinning)
10. Afterall you can install VoodooI2C.kext and satellite VoodooI2CELAN.kext into /EFI/Clover/kexts/Other (I did this as in guide, don't know if you can use other location like /S/L/E or /L/E, probably yes...)
11. Reboot and it should work.

Here's my device (ETPD) section in my DSDT.dsl :
Code:
        Device (ETPD)
        {
            Name (_ADR, One)  // _ADR: Address
            Name (EPID, Package (0x04)
            {
                "ELAN1000", 
                "N/A", 
                "N/A", 
                "N/A"
            })
            Name (FPID, Package (0x04)
            {
                "FTE1001", 
                "N/A", 
                "N/A", 
                "N/A"
            })
            Method (_HID, 0, NotSerialized)  // _HID: Hardware ID
            {
                If (ELAN)
                {
                    Return (DerefOf (Index (EPID, TPSL)))
                }

                If (FOLT)
                {
                    Return (DerefOf (Index (FPID, TPSL)))
                }

                Return ("ELAN1010")
            }

            Name (_CID, "PNP0C50")  // _CID: Compatible ID
            Name (_UID, One)  // _UID: Unique ID
            Name (_S0W, 0x03)  // _S0W: S0 Device Wake State
            Method (_S3W, 0, NotSerialized)  // _S3W: S3 Device Wake State
            {
                If (LEqual (S0ID, Zero))
                {
                    Return (0x03)
                }
                Else
                {
                    Return (Zero)
                }
            }

            Method (XDSM, 4, NotSerialized)
            {
                If (LEqual (Arg0, ToUUID ("3cdff6f7-4267-4555-ad05-b30a3d8938de") /* HID I2C Device */))
                {
                    If (LEqual (Arg2, Zero))
                    {
                        If (LEqual (Arg1, One))
                        {
                            Return (Buffer (One)
                            {
                                 0x03                                          
                            })
                        }
                        Else
                        {
                            Return (Buffer (One)
                            {
                                 0x00                                          
                            })
                        }
                    }

                    If (LEqual (Arg2, One))
                    {
                        Return (One)
                    }
                }
                Else
                {
                    Return (Buffer (One)
                    {
                         0x00                                          
                    })
                }
            }

            Method (_STA, 0, NotSerialized)  // _STA: Status
            {
                If (LEqual (TPIF, Zero))
                {
                    Return (Zero)
                }

                If (And (DSYN, One))
                {
                    Return (Zero)
                }

                Return (0x0F)
            }

            Name (SBFB, ResourceTemplate ()
            {
                I2cSerialBusV2 (0x0015, ControllerInitiated, 0x00061A80,
                    AddressingMode7Bit, "\\_SB.PCI0.I2C0",
                    0x00, ResourceConsumer, , Exclusive,
                    )
            })
            Name (SBFG, ResourceTemplate ()
            {
                GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000,
                    "\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
                    )
                {   // Pin list
                    0x55
                }
            })

            Method (_CRS, 0, Serialized)  // _CRS: Current Resource Settings
            {
                Return (ConcatenateResTemplate (SBFB, SBFG))
            }
        }
 
Sounds good! I had given all of that a try several days back, using several different pins (I think 55 was the one that matched their lists) and failing. Developers told me to re export dsdt and start again.

Glad to hear that you were successful! I'll give it another whirl. Maybe you or I could submit a patch to the repository for the ux305ca.
 
Success! Thanks Gobol! Working v2.0.1 Voodoo I2C.
 
I just did it for UX305CA and got it to work.

Requirements:
1. Ability to patch DSDT (without it - don't even bother - you cannot succeed) - MaciASL (Rehabman version used here)
2. Having your DSDT.dsl for actual working hackintosh (patched properly)
3. It is easier when you can identify ACPI device ID used by your touchpad (in my case: ETPD) - easiest in Windows (as per : https://voodooi2c.github.io/#GPIO Pinning/GPIO Pinning )

Guide:
1. Delete old VoodooI2C.kext, rebuild cache, reboot
2. Add VoodooI2C-Patches repo to MaciASL
3. Load your DSDT.dsl and ensure you patched it with Windows OS patch (I've used Windows 10)
4. Save, Compile, save to /EFI/Clover/ACPI/patched/DSDT.AML (!) as binary compiled ACPI-ML (not *.DSL - obviously), reboot
5. Load again your DSDT.dsl and patch with I2C Controllers [SKL] patch
6. repeat 4.
7. Load again DSDL.dsl and patch with GPIO Controller Enable patch
8. repeat 4.
(those repetitions are to ensure everything is bootable after each patch)
9. Now the hard work to check Touchpad device pinning to GPIO - you need to follow strictly and pedantically GPIO Pinning tutorial. (https://voodooi2c.github.io/#GPIO Pinning/GPIO Pinning)
10. Afterall you can install VoodooI2C.kext and satellite VoodooI2CELAN.kext into /EFI/Clover/kexts/Other (I did this as in guide, don't know if you can use other location like /S/L/E or /L/E, probably yes...)
11. Reboot and it should work.

Here's my device (ETPD) section in my DSDT.dsl :
Code:
        Device (ETPD)
        {
            Name (_ADR, One)  // _ADR: Address
            Name (EPID, Package (0x04)
            {
                "ELAN1000",
                "N/A",
                "N/A",
                "N/A"
            })
            Name (FPID, Package (0x04)
            {
                "FTE1001",
                "N/A",
                "N/A",
                "N/A"
            })
            Method (_HID, 0, NotSerialized)  // _HID: Hardware ID
            {
                If (ELAN)
                {
                    Return (DerefOf (Index (EPID, TPSL)))
                }

                If (FOLT)
                {
                    Return (DerefOf (Index (FPID, TPSL)))
                }

                Return ("ELAN1010")
            }

            Name (_CID, "PNP0C50")  // _CID: Compatible ID
            Name (_UID, One)  // _UID: Unique ID
            Name (_S0W, 0x03)  // _S0W: S0 Device Wake State
            Method (_S3W, 0, NotSerialized)  // _S3W: S3 Device Wake State
            {
                If (LEqual (S0ID, Zero))
                {
                    Return (0x03)
                }
                Else
                {
                    Return (Zero)
                }
            }

            Method (XDSM, 4, NotSerialized)
            {
                If (LEqual (Arg0, ToUUID ("3cdff6f7-4267-4555-ad05-b30a3d8938de") /* HID I2C Device */))
                {
                    If (LEqual (Arg2, Zero))
                    {
                        If (LEqual (Arg1, One))
                        {
                            Return (Buffer (One)
                            {
                                 0x03                                        
                            })
                        }
                        Else
                        {
                            Return (Buffer (One)
                            {
                                 0x00                                        
                            })
                        }
                    }

                    If (LEqual (Arg2, One))
                    {
                        Return (One)
                    }
                }
                Else
                {
                    Return (Buffer (One)
                    {
                         0x00                                        
                    })
                }
            }

            Method (_STA, 0, NotSerialized)  // _STA: Status
            {
                If (LEqual (TPIF, Zero))
                {
                    Return (Zero)
                }

                If (And (DSYN, One))
                {
                    Return (Zero)
                }

                Return (0x0F)
            }

            Name (SBFB, ResourceTemplate ()
            {
                I2cSerialBusV2 (0x0015, ControllerInitiated, 0x00061A80,
                    AddressingMode7Bit, "\\_SB.PCI0.I2C0",
                    0x00, ResourceConsumer, , Exclusive,
                    )
            })
            Name (SBFG, ResourceTemplate ()
            {
                GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000,
                    "\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
                    )
                {   // Pin list
                    0x55
                }
            })

            Method (_CRS, 0, Serialized)  // _CRS: Current Resource Settings
            {
                Return (ConcatenateResTemplate (SBFB, SBFG))
            }
        }
Finally got my ELAN1000 working. But I have to use VoodooI2CHDI.kext instead of the ELAN kext. For me multitouch gestures like scrolling or switching spaces do not work. Do you have any idea about this?

EDIT: Seems like installing the voodooi2celan did not work. Injecting it using clover now gives me full multitouch support.
 
Last edited:
I've a little "noobish" question...How to edit DSDT kext? Chrinist sayd: "copy/paste" ...but "paste" where?
 
Okaaii! Thank You Very Much!
 
Status
Not open for further replies.
Back
Top