Jump to content

Latitude 5400: TouchPad issue - two units, one working, one not


BillDH2k
Go to solution Solved by BillDH2k,

Recommended Posts

I have a nearly perfect working 5400 (unit #1, i5-8365U, my signature system) running Monterey. Try to setup an 2nd 5400 (Unit #2, i5-8250U), using the same EFI, the TouchPad is not working, while everything else appeared to be working fine.

 

There are some some differences the two systems: they used different touch pad boards (see attached two pictures. Matching stock pictures). #1 has P/N 02GW1W, #2 has 04HHPD. In addition, #1 has Thunderbolt option, while #2 does not. I've attached the config.plist, and IO register reports below. This could be simple driver change, but I don't know which one to use.

 

There is another difference: #1 has BIOS 1.22.1 (able to disable CFG Lock), while #2 has 1.23 (unable to disable CFG Lock, not down-gradable to older BIOS). 

 

Anyone has an answer? Thanks!

 

 

02GW1W-#1-Latitude 5400.jpg

04HHPD-#2-Latitude5400.jpg

config.plist.zip 5400-#1-IOReg-WorkingTouchPad.zip 5400-#2-IOReg-NonWorkingTouchPad.zip

Link to comment
Share on other sites

  • Solution

@Baio77  It turned out to be a simple fix. The culpit was that GPIO device in the unit #2 was not enabled by the generic "SSDT-GPI0.aml" patch used in my EFI. I had to use a different method, by setting GPEN =1, to enable it (as explained in the OpenCore guide, for my particular case). Also, I updated to the latest woodooI2C.kext. Now the touchpad worked!

 

Here is the updated SSDT-GPIO.aml, only works on unit #2 (it's BIOS ACPI code will enable GPIO if GPEN =1):

/* SSDT-GPIO.aml */
DefinitionBlock ("", "SSDT", 2, "DRTNIA", "GPI0", 0x00000000)
{
    External (GPEN, FieldUnitObj)
    If (_OSI ("Darwin"))
    {
        \GPEN = One
    }
}


For comparison, here is the generic patch, which works on unit #1, not unit #2 (#1's BIOS is different. Not 100% sure caused by the version difference, or hardware difference):

DefinitionBlock ("", "SSDT", 2, "hack", "GPI0", 0x00000000)
{
    External (_SB_.PCI0.GPI0, DeviceObj)
    Scope (_SB.PCI0.GPI0)
    {
        Method (_STA, 0, NotSerialized)  // _STA: Status
        {
            Return (0x0F)
        }
    }
}

 

@Baio77: The AlpsHID kext also worked, but GPIO must be enabled first.

  • Like 1
Link to comment
Share on other sites

yes analyzing ioreg I have not observed carefully , but the problem is what you wrote. it is very probable that 2 identical PCs have different HW components and/or different ACPI so it is easy to deal with problems similar to yours. All is well, that ends well 😃

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...