New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ELAN0629 broke with 2.5.2 but worked fine with 2.4.4 (latest Catalina) #396
Comments
To expand a little on my setup, I do not use a fully edited/patched DSDT of my Lenovo IdeaPad S145-14iWL laptop but rather an SSD patch that adds the missing Methods:
These Methods SSCN and FMCN don't exist in Device (_SB.PCI0.I2C0) prior to (TPD0) and are added easily via Clover hot-patch. Thanks EDIT: Mixing kexts doesn't work i.e. VoodooI2C v2.5.2 with VoodooI2CELAN v2.4.4 doesn't work, seems main kext also changed something that breaks ELAN0629 polling mode. EDIT: @EmotionalLove you dealt with this ELAN satellite kext before, I think, any possibility to assist and check what has changed? |
It should be good if native interrupt works as expected. It's a bit aggressive to fetch alternative GPIO configuration instead of just fallback to polling mode. If then the GPIO pin could not be initialized or re-enabled after sleep, there's no mechanism to fallback to polling mode. Which is the case of this issue. (I suppose GPIO interrupt should always work if defined in DSDT, while something breaks in |
Hello to both @kprinssu and @zhen-zen thank you for your feedback although I may not grasp exactly what is discussed, please remember that I only got my ELAN0629 to work via polling and not interrupt (unfortunately). Not sure how this impacts your reply. Thanks again (let me know if you'd like me to test some test Kext at any time). EDIT: A quick question, please. The missing (from my DSDT) but needed methods |
VoodooI2C.kext.zip |
Hi @zhen-zen thank you, will gladly try it. Please, what about the ELAN plugin? Should I use the same from v2.5.2 release? This is only the main kext obviously. And what logs do you want me to provide, as well? Thanks |
I only changed VoodooI2C and VoodooGPIO so interrupt on invalid GPIO pin will not be enabled. Other satellite kexts from 2.5.2 should be good. Just related boot log should be good. |
Hi @zhen-zen I tried your attached Voodoo2C kext above, with the ELAN satellite plugin from the official v2.5.2 release. It is not working, now the mouse pointer doesn't even move as badly as before :( Here is the log (kernel) since boot (containing "voo" as string):
Despite not getting errors that might help you, I am not having the touchpad working as nicely as with v2.4.4 unfortunately... Hope you can help further. Thanks again. |
So it sounds like a terrible GPIO pin. And what do you have without |
Without Methods SSCN and FMCN you mean @zhen-zen ? And keeping VoodooI2C and ELAN satellite kexts loaded? No usability at all. Do you want me to provide boot logs by rebooting and excluding these Methods? (they are conveniently in a SSDT). Moment please. Rebooted with dropping my own SSDT-I2C0.aml and as expected, touchpad is just a palmrest :-/
These two But even with its bad GPIO pin, version 2.4.4 worked with polling so something drastic happened in your great kext code :-( Would a disassembled DSDT help you if I posted it here as attachment? UPDATE: Even adding VoodooI2CHID satellite kext, without SSCN and FMCN methods injected, nothing works. |
Hello @kprinssu and @ben9923 and @zhen-zen would there be any opportunity to further debug my issue, if you have time? Thank you in advance for all your help... Not sure if other people with similar (possibly crappy GPIO pin, too) may face the issue already... Staying back at v2.4.4 is a solution but with Big Sur around the corner, not sure if further development of the VoodooI2C work will solve this or not :-( |
@mackonsti Sorry for the late response. As for your kernel logs, please add Can you add the The better way would be trying to make GPIO work.
You can do it by renaming the method to
Then adding an SSDT with a new |
Hello @ben9923 and season greetings! Allow me to come back to you in a few weeks as I sent my Lenovo with this ELAN0629 touchpad to servicing... In the meantime, if anyone else encounters the same problem with latest releases that don't work (compared to functional 2.4.4) and after trying your advice above, I hope they will be able to report their findings here. Thank you again for your kind assistance. |
Good evening @ben9923 thank you for your feedback. Apologies for taking so long to reply. I had sent my Lenovo to service and the replacement keyboard took ages to arrive from the Asian factory due to the pandemic... Unfortunately the trackpad remained the same ELAN0629 😄 A month ago I managed to get it and by the time I updated Clover, kexts etc. I wanted to leave this last. So running Clover r5136 with the latest available today VoodooI2c v2.6.5 where I installed the two only needed kexts, in this case VoodooI2C.kext and VoodooI2CELAN.kext which I confirmed that both loaded fine. I tried adding the boot argument Here is the boot log with grep filter to "voodoo" please have a look and confirm everything seems normal?
Regarding the cleaner solution, would adding a device injection for the I2C device and force-polling with boolean value "true" work? Or something like "0x01" is better? (
My device per Finally, the patch to the device TPD0 that you suggest is confusing to me, so your help would be appreciated. If you see the DSL attached, under However, inside there is a condition A search in the DSDT code shows that there exists a I can experiment this weekend if you have time to provide a quick tip or advice; are we supposed to declare SHPO for our kext to use GPIO on this ELAN0629 trackpad ? Also, I assume that if I achieve such DSDT hot-patch, then the device injection of force-polling must be removed, correct? Many thanks! |
@mackonsti Can you please check if the issue persists with 2.7? Otherwise, I will be closing this issue in 3 days. |
Hello @kprinssu thank you for taking time to look into this matter. In my well-tuned configuration (updated OpenCore and Big Sur since then) I rebooted and disabled this Sorry 😢 Thanks for your efforts though. |
@mackonsti Can you please try getting GPIO pinning to work? Polling will inherently be in superior due to constantly checking if there is any input on the I2C bus. This is quite inefficient and slow as we are wasting CPU cycles when there is no data to process. GPIO will use interrupts which should result in a better experience over-all. I cannot provide support on how to do this, please read our documentation on how to do so. Additionally, please consider using Open Core over Clover, please read this as to why Open Core is better: https://dortania.github.io/OpenCore-Install-Guide/why-oc.html |
Hi @kprinssu yes already using OpenCore as mentioned earlier. And I do believe you that GPIO is superior to polling. I had tried finding the values and using GPIO with the VoodooI2C guide found here, but it produced no results, I abandoned it after spending hours and dozens of reboots trying alternative/tweaked values. I think there's either a) lack of support for my ELAN touchpad, b) no support for Whiskey Lake like my hardware c) OR there's something wrong with my DSDT -- and I despite understanding a lot, I was not in a position to "code" the new section so I can get it to work. Also as you see, there's only 1 person that had added his/her effort in the patching repo and that was 4 years ago 😞 Moreover, with OpenCore I am not using a patched DSDT, from early tests I use different SSDTs ; do you know if such a method can get results by injecting some SSDT? Switching to custom DSDT may require a lot of effort to "stabilise" it vs. the patches of SSDTs. Are you using a custom-DSDT or a mix? I guess I can try again, with your encouragement, hoping that you can help provide some information/guidance. Let me know if you want me to create a new Issue, to avoid spamming this one. Thanks. |
@mackonsti Can you attach a new troubleshooting archive made with current configuration? Make sure you're using latest BIOS for your machine, as it someimes helps fixing such issues. It is possible to "hotpatch" (use SSDTs + patches) rather than static DSDT patching for this purpose - for any purpose really :) |
Please give me some time @ben9923 as I haven't done that for > 16months and I need to read again how to do this... I will update the thread once done. Thank you for your patience. |
Hi @ben9923 here is my troubleshooting archive, I had the opportunity to update to latest OpenCore in the meantime.
Troubleshooting archive notes:
Lenovo_S145_ELAN_VoodooIC2_2.7.0.zip Do let me know if there is something missing or required for your research. Thank you. |
Hi @ben9923 and everyone, hope you are well. After studying the GPIO pinning guide and double-checking the procedure, I'd like to report that even with pinning, ELAN0629 is jumpy 😢 Please see below steps and findings:
Your help is welcome... How I calculated:
The corresponding label on the left hand side of the form GPP_XYY_IRQ for hexadecimal APIC pin number 0x6e found:
X="D" or X="G" Found the GPP of the pin in the final list for my Canon Point-LP. A GPP with the form
Convert my hardware pin to a usable GPIO pin: take the decimal GPIO pin number found, subtract the
This is my hexadecimal GPIO pin.
I tired 0x6e (surprisingly the same number as my APIC pin, is this normal?) Questions, with my advance thanks for your reply: a) If the wrong hexadecimal GPIO pin is used, it the trackpad supposed to respond even if jumpy or appear dead? b) From my screenshot above of IORegistryExplorer, do you believe that the driver for GPIO pinning is properly loaded/connected, despite the bad value? c) Could this jumpy-state be related to IRQs i.e. interrupts? How can I find the interrupt used? d) Could it be that my actual hardware does not support pinning at all or is this not the case with ELAN trackpads? e) Despite having found the correct GPIO pin, could some code in the SSDT/DSDT cause this jumpiness? f) Although my hardware (Whiskey Lake) is reported as Canon Point-LP the links on the "GPIO Pinning Guide" point to URLs that mention "Canon Lake" is it safe to assume that they are actually the correct references? (just exclude a possible mistake). g) The following kernel logs are found (with Release version of VoodooI2C, not Debug or Symols as I don't know how to implement this) avoiding those "UUID failure" lines:
cc: @zhen-zen @kprinssu your feedback is most welcome. These latter questions could also be part of the GPIO Pinning Guide that I'd be happy to improve. Thank you.
UPDATE 2: I disabled ELAN and enabled VoodooI2CHID with GPIO pin injected (via SSDT). The kext has found and is attached to TPD1 just fine (per IORegistryExplorer). Mouse pointer is fluid but always continues moving to the end of screen (rather unusable) and control is difficult. Touchpad no longer reported to Big Sur (normal?) and left-click is not working. |
Hi @zhen-zen @kprinssu I'd like to request your kind assistance. Please find attached the IOReg with polling enabled. I have tried a lot of SSDTs but I was not able to finally create a TPDx device that works except copying the original DSDT of my Lenovo. Pinning or Polling. So I only corrected the native TPD0 device's Could you help me identify why (and due to what hardware parameters, via debugging) the ELAN driver despite connecting, makes the movement jumpy when polling (GPIO) ? Enabling HID kext without other changes (OC, SSDT or other) produces a smooth cursor movement but always keeps moving to the right (it is unusable). How can I further provide debug information on all VoodooI2C kexts loaded? I added the dSYM files next to the original VoodooI2C kexts in the OpenCore kexts folder, include
I am sure if you analyse my IOReg you can see what may be wrong or what we could test in your ELAN kext code as tweak. Thank you for your time. |
Hi everyone, @kprinssu @ben9923 @zhen-zen I would appreciate if a kind soul would assist me in providing detailed logs on what is going on with my hardware (ELAN0629) as pinning seems to work but is jumpy... a) what boot arguments are required? Thanks for your time, I understand ELAN0629 may not be a priority to fix, but you could possibly discover issues in the code that would be interesting to correct, for more touchpads... |
Describe the bug
My ELAN0629 touchpad became jumpy, unresponsive at times and totally non-usable after updating the main kext and plugin, from v2.4.4 to v2.5.2 without changing anything else.
Did you read the common errors documentation?
Yes but this error-issue is not described in the documentation, unfortunately.
Did you read the troubleshooting documentation?
Yes, posted my RunMe zip files before/after the issue, as well as my question to Glitter but no response by someone, for some days.
Have you searched the issue on Github, Gitter, or Google?
Yes but I could not find a concrete solution, nor did anyone else report this (with solution either).
System Environment
Troubleshooting Archive
I am attaching 2 x ZIPs from RunMe.app compiled files, one for v2.5.2 and one with 2.4.4 driver versions. I hope these help, please let me know if there is anything more that I can provide.
Lenovo_ELAN0629_VoodooI2C_v2.4.4.zip
Lenovo_ELAN0629_VoodooI2C_v2.5.2.zip
Additional context
The same exact Clover and kexts configuration has been used, with the only difference of changing VoodooI2C kext and ELAN plugin: hence the issue detected. Something has changed in the driver in 2.5.2 that makes ELAN0629 polling not happy at all.
What is weird is that when tested VoodooI2CHID.kext instead of VoodooI2CELAN.kext, the mouse was moving smoothly and scrolling but always kept going to the top-right corner of screen as if someone was moving it. Each time I tried to grab it, them moment I release it, it kept moving back to top-right corner of screen. Despite not a usable solution, this implies to me that the code can get ELAN0629 to work smoothly; just that v2.5.2 of the plugin or core kext has something that broke it.
Thank you.
The text was updated successfully, but these errors were encountered: