Jump to content
10 posts in this topic

Recommended Posts

Esse post tem o propósito de documentar os patches necessários para a utilização da kext VoodooI2C e seu satélite VoodooI2CHID no notebook Acer Aspire F15 (ACER-F5-573G).

 

VoodooI2C é um projeto que adiciona suporte para dispositivos que utilizam o barramento I2C. O trackpad ELAN0501 do notebook Acer Aspire F15 utiliza esse barramento internamente.

 

As outras opções para ativar o trackpad neste notebook envolvem usar o VoodooPS2Controller ou o ApplePS2SmartTouchPad. O problema do primeiro é que... bem, ele não funciona. No momento em que o trackpad é tocado, o cursor pula pela tela toda sem parar. Já o segundo é o mais fácil pois funciona bem e é capaz de prover funções de multitoque e gestos. Porém, eu sempre achei alguns gestos do ApplePS2SmartTouchPad meio esquisitos, como a rolagem que não acompanha o toque precisamente como aconteceria em trackpads Synaptics no macOS.

 

Então descobri que era possível usar o VoodooI2C com trackpads ELAN e resolvi tentar. Ao contrário do ApplePS2SmartTouchPad, o VoodooI2C necessita de muita configuração prévia, sendo o mais complicado o processo de GPIO pinning, mas fiquei bastante feliz com os resultados. Esse post documenta os patches usados.

 

Meu hackintosh é baseado na EFI de johnnywolinger para macOS 10.14. Não o conheço, mas já deixo meus agradecimentos por ter facilitado minha vida. Como estou rodando o Catalina 10.15.5, tive que atualizar algumas kexts (WhateverGreen se não me engano) para evitar um KP durante o boot. A DSDT que eu estou utilizando veio do repositório dele. As únicas alterações que fiz foram os patches necessários ao VoodooI2C.

 

PASSOS

1. Baixe o MaciASL neste link.

2. Abra a sua DSDT nele e aplique os patches [GPIO] GPIO Controller Enable [SKL+] e [Windows] Windows 10 Patch, conforme foto no spoiler. O propósito desses patches é explicado em detalhes no guia de instalação do VoodooI2C. Simplificando, o primeiro patch ativa os interrupts e o segundo permite que o macOS enxergue o dispositivo I2C.

Spoiler

Untitled.thumb.jpg.eaaab76f88bb6d746857491aa6bfcc3d.jpg

3. A partir disso, é necessário aplicar os patches específicos de cada computador. No spoiler, eu explico o processo que usei para encontrar as informações. O texto só faz sentido se você já leu o guia de instalação original. Caso não esteja interessado nos detalhes, siga em frente.

Spoiler

Primeiro, encontrei o nome do dispositivo usando o Gerenciador de Tarefas Dispositivos do Windows. Nesse caso, o nome do dispositivo é TPDE. Na DSDT, ele se encontra em "\_SB.PCI0.I2C0.TPDE".

 

Depois apliquei os patches mencionados no ponto anterior para que o IORegExplorer pudesse enxergar o dispositivo.

Usando o IOJones, procurei pelo dispositivo TPDE e encontrei o pin APIC Hexadecimal: 0x52.

 

Esse APIC pin é maior que 0x2F, o que significa que temos que fazer o pinning do dispositivo manualmente. Usando os termos do tutorial original em inglês, my device is unpinned.

 

Então consultei as tabelas para encontrar o GPIO Label, o pin decimal do GPIO e suas versões convertidas para hexadecimal. Ficou assim:

GPIO Labels: GPP_C10_IRQ e GPD2_IRQ.

GPIO pin decimal: 58 e 154.

GPIO pin hexadecimal: 0x3A e 0x9A

 

Encontrei dois labels, porém, somente o primeiro é usado. Como este notebook é Cannon Lake, não existe incompatibilidade entre o pin de GPIO e o pin de hardware.

 

Finalmente, chegamos no número mágico: 0x3A. Este é o pin do GPIO onde o dispositivo TPDE será pinnado.

4. Na DSDT, encontre o method _CRS, que está no final do dispositivo TPDE.

Spoiler

2.jpg.33a1f31d09e29bdb0eb90a27e473ed12.jpg

5. Encontrado o Method _CRS, copie o código abaixo.

            Name (SBFG, ResourceTemplate ()
            {
                GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000,
                    "\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
                    )
                    {   // Pin list
                        0x003A
                    }
            })
            Method (_CRS, 0, Serialized)  // _CRS: Current Resource Settings
            {
                Name (SBFB, ResourceTemplate ()
                {
                    I2cSerialBusV2 (0x0015, ControllerInitiated, 0x00061A80,
                        AddressingMode7Bit, "\\_SB.PCI0.I2C0",
                        0x00, ResourceConsumer, , Exclusive,
                        )
                })
                Return (ConcatenateResTemplate (SBFB, SBFG))
            }

6. Copiado, volte ao MaciASL e selecione todo o Method _CRS, conforme a foto. Selecione desde o "Method (_CRS" até aquela última chave que está no mesmo nível de Method.

3.jpg.d1b7ecdad7f7e41be92a9a77f7cc6c06.jpg

 

7. Cole, substituindo todo o Method. Deverá ficar assim depois de colado. Note que temos um item chamado Name SBFG e um chamado Method _CRS.

4.jpg.8ac7687d88cf4145bd1db03b48f75f59.jpg

 

8. Se estiver tudo certo, compile a DSDT e coloque na pasta EFI/ACPI/Patched, onde o Clover está instalado.

 

Pra finalizar, basta instalar as kexts VoodooI2C e VoodooI2CHID na pasta de kexts do Clover. Ambas podem ser baixadas aqui.

Se tudo der certo, ao reiniciar, o trackpad deverá estar funcionando corretamente.


CONSIDERAÇÕES FINAIS

Se isso parece difícil demais, não esquenta. A VoodooI2C nem é tão melhor que a ApplePS2SmartTouchPad assim. Fiz mais por curiosidade do que por necessidade.

Se você quiser BAIXAR A DSDT PRONTA, acesse o repositório do johnnywolinger. Tem tudo lá.

Por que usar VoodooI2CHID em vez de VoodooI2CELAN? Basicamente, a segunda não funciona. Eu testei tanto com o pin 0x3A quanto com o pin 0x9A. Aparentemente, ela só funciona com dispositivos ELAN mais antigos.

Por fim, quero transformar esse patch num patch automático a ser utilizado no MaciASL, só que não sei como faz. Se eu aprender, edito o post.

Edited by deomkds
  • Like 2
  • 2 weeks later...
  • 3 weeks later...

Thank you for this, I have exactly the same touchpad : (ELAN0501, TPDE) However this doesn't seems to work for me. 

On 6/6/2020 at 1:23 AM, deomkds said:

Depois apliquei os patches mencionados no ponto anterior para que o IORegExplorer pudesse enxergar o dispositivo.

Usando o IOJones, procurei pelo dispositivo TPDE e encontrei o pin APIC Hexadecimal: 0x52.

I dint see TPDE in IOJones, nor in IORegistryExplorer. 

I patched the DSDT, added the VoodoI2C.kext and VoodoI2CHID, but the touchpad is not working.

Here is an IROEG and a DSDT (patched) DSDT-Original.dsl (unpatched), I'll appreciate any help. This is the very last issue on my Acer Aspire V5-591G.

 

MacBook Pro.ioreg

DSDT.aml

DSDT-Original.dsl

Edited by kushwavez
2 hours ago, kushwavez said:

Thank you for this, I have exactly the same touchpad : (ELAN0501, TPDE) However this doesn't seems to work for me. 

I dint see TPDE in IOJones, nor in IORegistryExplorer. 

I patched the DSDT, added the VoodoI2C.kext and VoodoI2CHID, but the touchpad is not working.

Here is an IROEG and a DSDT (patched) DSDT-Original.dsl (unpatched), I'll appreciate any help. This is the very last issue on my Acer Aspire V5-591G.

 

MacBook Pro.ioreg

DSDT.aml

DSDT-Original.dsl

Post in Portuguese.

Poste em Português.

  • 4 weeks later...
On 7/9/2020 at 12:31 PM, kushwavez said:

Thank you for this, I have exactly the same touchpad : (ELAN0501, TPDE) However this doesn't seems to work for me. 

I dint see TPDE in IOJones, nor in IORegistryExplorer

 I patched the DSDT, added the VoodoI2C.kext and VoodoI2CHID, but the touchpad is not working.

Here is an IROEG and a DSDT (patched) DSDT-Original.dsl (unpatched), I'll appreciate any help. This is the very last issue on my Acer Aspire V5-591G.

 

MacBook Pro.ioreg

DSDT.aml

DSDT-Original.dsl

 

I'm sorry for the late response, college has been taking up all of my time. I hope you have solved this by now, but if you didn't, can you tell me if you have applied this patch here? Your system is Skylake which needs them, and by comparing the DSDTs you provided it seems that you don't have them applied.

Edited by deomkds
  • 2 weeks later...
On 8/1/2020 at 7:46 PM, deomkds said:

 

I'm sorry for the late response, college has been taking up all of my time. I hope you have solved this by now, but if you didn't, can you tell me if you have applied this patch here? Your system is Skylake which needs them, and by comparing the DSDTs you provided it seems that you don't have them applied.

Thanks for the reply!

So today I recreated the whole Clover with new DSDT, etc etc. But no avail, still no keyboard and touchpad. 

kextsat showing that VoodooI2CServices, VoodooI2C and VoodooGPI0 is loaded. VoodooPS2Keyboard seems like not loaded (but I think that because I didn't fixed the permission on that after removed VoodooPS2Mouse from inside the kext).

 

IOReg shows that TPDE is recognised. 

 

No logs related to Voodoo*

 

In DSDT I applied the SKL+ GPI0 patch, I didn't apply the Windows 10 patch because I have SSDT-XOSI and _OSI to XOSI patch inside ACPI/patched and config.plist for that (but I tried that too)

 

Interesting thing is that after I apply only just the Windows patch my keyboard and touchpad simply not working with ElanSmartTouchpad kext too. For the touchpad I somehow understand but what about the keyboard? how is that not working? After disabling SSDT-XOSI and _OSI to XOSI they're working again.

 

Anyway kextsat shows that I have ElanSmartTP kexts loaded too, but I tried without that so that's not a problem. 

I am attaching my new debug zip with new Clover, DSDT, kextstat and IOReg.

It's really interesting since we have the same device (as for the Touchpad and the keyboard).

 

Just a check... Do you have "Advanced" in BIOS - Trackpad settings?

As I understand the "Basic" is the simple PS2, and the "Advanced" is the I2C one.

I2CDebug.zip

On 8/14/2020 at 3:56 PM, kushwavez said:

Anyway kextsat shows that I have ElanSmartTP kexts loaded too, but I tried without that so that's not a problem. 

 

Just a check... Do you have "Advanced" in BIOS - Trackpad settings?

As I understand the "Basic" is the simple PS2, and the "Advanced" is the I2C one.

I2CDebug.zip

 

I completely removed everything related to PS2 mice and trackpads from my Clover folder. Here's what I have now:

  • VoodooI2C.kext
  • VoodooI2CHID.kext
  • VoodooPS2Controller.kext (removed VoodooPS2Mouse and VoodooPS2Touchpad plugins)

Inside VoodooPS2Controller/Contents/PlugIns, I've kept just VoodooInput.kext and VoodooPS2Keyboard.kext.

 

The downside of using VoodooPS2Controller is that the FN+brightness keys don't work. But that's the only way I was able to get both trackpad (I2C) and keyboard (PS2) to work together. I'm sure there's a way to configure the brightness keys in VoodooPS2Keyboard, but I never bothered looking for it.

 

Anyway, I noticed that you use VirtualSMC... and I'm still on FakeSMC. Could that be the problem?

 

Apart from these, I'm kinda out of ideas about what could be the issue here. Hope you find a solution, though!

 

Also, I do have an "Advanced" setting for the Trackpad in BIOS and it is set to "Advanced".

@deomkds Unfortunately I tried everything but none of them worked. The touchpad is not working and the keyboard with VoodooPS2Controller become unresponsive at login screen after ~3 seconds. 

Anyway here is my latest debug.zip for people who interested in this/also have this problem. 

 

It's a pity but I'll stick with the outdated ElanSmartTouchpad kexts, I wrote to the devs gitter chat too but unfortunately they can't (or don't want to) help, so I gave up. 

 

Thank you so much for your help and patience!

I2CDebug_2.zip

  • Like 1
×
×
  • Create New...