Jump to content

How to fix I2C Trackpad?


oldman20
 Share

18 posts in this topic

Recommended Posts

after tried many times, trackpad still not working

Here is my devices:

~$ sudo dmesg | grep -i input
[    1.047936] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input0
[    1.047995] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input1
[    1.048040] input: Sleep Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input2
[    1.048079] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input3
[    1.104768] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input4
[    1.519008] input: DLL06B0:00 06CB:78F1 Mouse as /devices/pci0000:00/INT3433:00/i2c-1/i2c-DLL06B0:00/0018:06CB:78F1.0001/input/input7
[    1.519138] hid-generic 0018:06CB:78F1.0001: input,hidraw0: I2C HID v1.00 Mouse [DLL06B0:00 06CB:78F1] on i2c-DLL06B0:00
[    2.820686] input: Synaptics TM3096-001 as /devices/pci0000:00/INT3433:00/i2c-1/i2c-DLL06B0:00/0018:06CB:78F1.0001/input/input9
[    2.820777] hid-rmi 0018:06CB:78F1.0001: input,hidraw0: I2C HID v1.00 Mouse [DLL06B0:00 06CB:78F1] on i2c-DLL06B0:00
[    3.004622] input: Logitech USB Receiver as /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/0003:046D:C52B.0002/input/input10
[    3.058075] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input11
[    3.062976] hid-generic 0003:046D:C52B.0002: input,hidraw1: USB HID v1.11 Keyboard [Logitech USB Receiver] on usb-0000:00:14.0-3/input0
[    3.063079] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:1e/LNXVIDEO:01/input/input12
[    3.065008] input: Logitech USB Receiver Mouse as /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.1/0003:046D:C52B.0003/input/input13
[    3.065153] input: Logitech USB Receiver Consumer Control as /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.1/0003:046D:C52B.0003/input/input14
[    3.122967] input: Logitech USB Receiver System Control as /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.1/0003:046D:C52B.0003/input/input15
[    3.123094] hid-generic 0003:046D:C52B.0003: input,hiddev0,hidraw2: USB HID v1.11 Mouse [Logitech USB Receiver] on usb-0000:00:14.0-3/input1
[    3.124604] hid-generic 0003:046D:C52B.0004: hiddev1,hidraw3: USB HID v1.11 Device [Logitech USB Receiver] on usb-0000:00:14.0-3/input2
[    3.332372] logitech-djreceiver 0003:046D:C52B.0004: hiddev0,hidraw1: USB HID v1.11 Device [Logitech USB Receiver] on usb-0000:00:14.0-3/input2
[    3.455678] input: Logitech Wireless Device PID:4069 Keyboard as /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.2/0003:046D:C52B.0004/0003:046D:4069.0005/input/input17
[    3.455972] input: Logitech Wireless Device PID:4069 Mouse as /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.2/0003:046D:C52B.0004/0003:046D:4069.0005/input/input18
[    3.456383] hid-generic 0003:046D:4069.0005: input,hidraw2: USB HID v1.11 Keyboard [Logitech Wireless Device PID:4069] on usb-0000:00:14.0-3/input2:1
[    3.576161] input: Logitech MX Master 2S as /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.2/0003:046D:C52B.0004/0003:046D:4069.0005/input/input22
[    3.576301] logitech-hidpp-device 0003:046D:4069.0005: input,hidraw2: USB HID v1.11 Keyboard [Logitech MX Master 2S] on usb-0000:00:14.0-3/input2:1
[    6.353578] input: DELL Wireless hotkeys as /devices/virtual/input/input23
[    6.867359] input: Integrated_Webcam_HD: Integrate as /devices/pci0000:00/0000:00:14.0/usb2/2-5/2-5:1.0/input/input24
[    6.911204] input: Dell WMI hotkeys as /devices/platform/PNP0C14:01/wmi_bus/wmi_bus-PNP0C14:01/9DBB5994-A997-11DA-B012-B622A1EF5492/input/input25
[    7.306338] input: HDA Intel HDMI HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:03.0/sound/card0/input26
[    7.306428] input: HDA Intel HDMI HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:03.0/sound/card0/input27
[    7.306506] input: HDA Intel HDMI HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:03.0/sound/card0/input28
[    7.306580] input: HDA Intel HDMI HDMI/DP,pcm=9 as /devices/pci0000:00/0000:00:03.0/sound/card0/input29
[    7.306660] input: HDA Intel HDMI HDMI/DP,pcm=10 as /devices/pci0000:00/0000:00:03.0/sound/card0/input30
[    7.363204] snd_hda_codec_realtek hdaudioC1D0:    inputs:
[    7.440736] input: HDA Intel PCH Headphone Mic as /devices/pci0000:00/0000:00:1b.0/sound/card1/input31
[   14.133895] rfkill: input handler disabled
[   20.845540] rfkill: input handler enabled
[   26.242864] rfkill: input handler disabled

I followed voodooi2c guide carefully:

  • correct my ACPI ID is TPD1, and know my CPU is Broadwell no need GPI0 controller patch, and I2C Controller Patches?
  • Windows Emulation patch will done with SSDT-XOSI.aml
  • Look at IOInterruptSpecifiers to know the hexadecimal APIC pin number is 0x1e mean 30 in decimal, less than 47, then can proceed to install kexts.

But at Step Ensure I2C Serial bus name is correctly labelled, I not sure about it. Here is original method from DSDT:

_SB.PCI0.I2C1.TPD1:

        Device (TPD1)
        {
            Name (_ADR, One)  // _ADR: Address
            Method (_HID, 0, NotSerialized)  // _HID: Hardware ID
            {
                If (LEqual (RDGI (0x35), One))
                {
                    Return (0xB0068C11)
                }
                Else
                {
                    Return (0xAF068C11)
                }
            }

            Name (_CID, "PNP0C50")  // _CID: Compatible ID
            Name (_UID, One)  // _UID: Unique ID
            Name (_S0W, 0x04)  // _S0W: S0 Device Wake State
            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                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 (0x20)
                    }
                }
                Else
                {
                    Return (Buffer (One)
                    {
                         0x00                                           
                    })
                }
                Return (Zero)
            }

            Method (_STA, 0, NotSerialized)  // _STA: Status
            {
                If (LEqual (And (SDS1, 0x08), 0x08))
                {
                    Return (0x0F)
                }
                Else
                {
                    Return (Zero)
                }
            }

            Method (_CRS, 0, Serialized)  // _CRS: Current Resource Settings
            {
                Name (SBFI, ResourceTemplate ()
                {
                    I2cSerialBusV2 (0x002C, ControllerInitiated, 0x00061A80,
                        AddressingMode7Bit, "\\_SB.PCI0.I2C1",
                        0x00, ResourceConsumer, , Exclusive,
                        )
                    Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, _Y2A)
                    {
                        0x0000001E,
                    }
                })
                If (LEqual (GR13, One))
                {
                    CreateDwordField (SBFI, \_SB.PCI0.I2C1.TPD1._CRS._Y2A._INT, VAL3)  // _INT: Interrupts
                    Store (0x1B, VAL3)
                }

                If (LOr (LOr (LEqual (BID, 0x80), LEqual (BID, 0x82)), LEqual (BID, 0x83)))
                {
                    CreateDwordField (SBFI, \_SB.PCI0.I2C1.TPD1._CRS._Y2A._INT, VAL4)  // _INT: Interrupts
                    Store (0x1A, VAL4)
                }

                Return (SBFI)
            }
        }

I renamed SBFI to SBFB and remove:

                    Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, _Y2A)
                    {
                        0x0000001E,
                    }

 

But can't compile, so I removed these too:

                })
                If (LEqual (GR13, One))
                {
                    CreateDwordField (SBFI, \_SB.PCI0.I2C1.TPD1._CRS._Y2A._INT, VAL3)  // _INT: Interrupts
                    Store (0x1B, VAL3)
                }

                If (LOr (LOr (LEqual (BID, 0x80), LEqual (BID, 0x82)), LEqual (BID, 0x83)))
                {
                    CreateDwordField (SBFI, \_SB.PCI0.I2C1.TPD1._CRS._Y2A._INT, VAL4)  // _INT: Interrupts
                    Store (0x1A, VAL4)
                }

 

Then compiled SSDT-TPD1.aml success (below attached files), put this SSDT-TPD1.aml in OC/ACPI and add to config.plist. Reboot and nothing change

Trackpad work like mouse, no gestures but Trackpad setting not show in system preferences, and nothing advance setting for trackpad in BIOS. Battery status + brighter slide working well

In IOReg, TPD1 show Interrupt mode is APIC, and can't see GPI0 - which I understand no need for Broadwell CPU right?1051016536_ScreenShot2022-09-08at19_52_19.png.085dbae0e5f1496e543d47c777005ad3.png

What were I missing? thank and regards!

HumanInterfaceDevice.png

Screen Shot 2022-09-08 at 20.16.00.png

Screen Shot 2022-09-08 at 20.15.40.png

 

With-SSDT-TPD1.ioreg

Without-SSDT-TPD1.ioreg

config.plist.zip SSDT-TPD1.aml.zip

Link to comment
Share on other sites

There are two VoodooI2C operation modes available in TPD1 Device: Interrupt (APIC) and Polling.
Apply the SSDT below and reboot.

SSDT-TPD1.aml.zip


Also, Interrupt (GPIO) mode is not available on Intel 5th Gen Broadwell CPU systems.

Therefore, there is no need to enable _STA of GPI0 Device.

And, disable or delete the Rename _STA to XSTA patch of GPI0 Device.


Additionally, "IOACPIPlatformDevice is not serializable" doesn't seem to have anything to do with the current touchpad not working.

Edited by shl628
  • Like 1
Link to comment
Share on other sites

I'm noticing from your Linux dmesg output that "hid-rmi" is used, so it may be worth trying VoodooRMI in place of VoodooI2CHID. I'm not seeing the Event Driver attach for precision trackpads so I'm guessing that it's not a generic HID trackpad, but a Synaptics device which uses RMI4. The APIC pin looks like it should work, I'm not sure why your original SSDT-TPD1.aml gets rid of that pin. Your right that you shouldn't need to do anything with the pin. I would try without the SSDT + patches when using VoodooRMI.

Edited by 1Revenger1
  • Like 2
Link to comment
Share on other sites

2 hours ago, shl628 said:

There are two VoodooI2C operation modes available in TPD1 Device: Interrupt (APIC) and Polling.
Apply the SSDT below and reboot.

SSDT-TPD1.aml.zip 747 B · 2 downloads


Also, Interrupt (GPIO) mode is not available on Intel 5th Gen Broadwell CPU systems.

Therefore, there is no need to enable _STA of GPI0 Device.

And, disable or delete the Rename _STA to XSTA patch of GPI0 Device.


Additionally, "IOACPIPlatformDevice is not serializable" doesn't seem to have anything to do with the current touchpad not working.

Your mean patch 10 + 11 should disable? I confused with _STA of GPI0, where?

after tried you TPD1 with disable  Rename _STA to XSTA patch, now IOReg show mode ACPI, not polling anymore, still can't detect in System Preferences panel, but trackpad still working like mouse, no guesture

Screen Shot 2022-09-10 at 12.50.15.png

Screen Shot 2022-09-10 at 12.50.38.png

HackBook Pro1.ioreg

2 hours ago, 1Revenger1 said:

I'm noticing from your Linux dmesg output that "hid-rmi" is used, so it may be worth trying VoodooRMI in place of VoodooI2CHID. I'm not seeing the Event Driver attach for precision trackpads so I'm guessing that it's not a generic HID trackpad, but a Synaptics device which uses RMI4. The APIC pin looks like it should work, I'm not sure why your original SSDT-TPD1.aml gets rid of that pin. Your right that you shouldn't need to do anything with the pin. I would try without the SSDT + patches when using VoodooRMI.

thank, I trying your tip now

Link to comment
Share on other sites

2 hours ago, shl628 said:

You need to disable patch 10 and enable patch 11.
Because _CRS Method in SSDT-TPD1.aml is used instead of _CRS in OEM DSDT, _CRS in OEM DSDT should be changed to XCRS.

 

5 hours ago, 1Revenger1 said:

I'm noticing from your Linux dmesg output that "hid-rmi" is used, so it may be worth trying VoodooRMI in place of VoodooI2CHID. I'm not seeing the Event Driver attach for precision trackpads so I'm guessing that it's not a generic HID trackpad, but a Synaptics device which uses RMI4. The APIC pin looks like it should work, I'm not sure why your original SSDT-TPD1.aml gets rid of that pin. Your right that you shouldn't need to do anything with the pin. I would try without the SSDT + patches when using VoodooRMI.

I tried disable patch 10, enable patch 11 and use VoodooRMI but don't know is it working or trackpad from VoodooPS2?

Screen Shot 2022-09-10 at 15.48.38.png

Screen Shot 2022-09-10 at 15.37.00.png

HackBook Pro-RMIIC.ioreg.zip

Edited by oldman20
Link to comment
Share on other sites

I2C should provide more data, giving better gestures and overall trackpad responsiveness. To make sure it's working over I2C, you could disable VoodooPS2Mouse+Trackpad to make sure it isn't interfering. If this works, then I'd try disabling patch 10, 11, and the SSDT to see if it works without. I'm fairly certain you don't need the ACPI edits.

  • Thanks 1
Link to comment
Share on other sites

12 hours ago, 1Revenger1 said:

I2C should provide more data, giving better gestures and overall trackpad responsiveness. To make sure it's working over I2C, you could disable VoodooPS2Mouse+Trackpad to make sure it isn't interfering. If this works, then I'd try disabling patch 10, 11, and the SSDT to see if it works without. I'm fairly certain you don't need the ACPI edits.

But in guide voodooRMI required VoodooPS2Mouse+Trackpad, isnt it? That why i not sure whick Trackpad work

Screenshot_20220911-123606_Edge.jpg

Link to comment
Share on other sites

They are required for SMBus mode, as VoodooPS2Synaptics provides some hardware info to VoodooRMI and resets the trackpad. I2C mode does not use the PS2 drivers this way and so the PS2 drivers can be disabled. Sometimes the PS2 controller is multiplexed and has both the trackpoint and trackpad plugged into different aux ports. VoodooPS2mouse would then be needed for the trackpoint, though I don't believe this is the case here.

  • Thanks 1
Link to comment
Share on other sites

1 hour ago, 1Revenger1 said:

They are required for SMBus mode, as VoodooPS2Synaptics provides some hardware info to VoodooRMI and resets the trackpad. I2C mode does not use the PS2 drivers this way and so the PS2 drivers can be disabled. Sometimes the PS2 controller is multiplexed and has both the trackpoint and trackpad plugged into different aux ports. VoodooPS2mouse would then be needed for the trackpoint, though I don't believe this is the case here.

then the guide voodooRMI doesn't seem very clear, right?

Can you give me a needed kexts and order for voodooRMI? Thank

Link to comment
Share on other sites

22 hours ago, 1Revenger1 said:

I2C should provide more data, giving better gestures and overall trackpad responsiveness. To make sure it's working over I2C, you could disable VoodooPS2Mouse+Trackpad to make sure it isn't interfering. If this works, then I'd try disabling patch 10, 11, and the SSDT to see if it works without. I'm fairly certain you don't need the ACPI edits.

 

9 hours ago, 1Revenger1 said:

They are required for SMBus mode, as VoodooPS2Synaptics provides some hardware info to VoodooRMI and resets the trackpad. I2C mode does not use the PS2 drivers this way and so the PS2 drivers can be disabled. Sometimes the PS2 controller is multiplexed and has both the trackpoint and trackpad plugged into different aux ports. VoodooPS2mouse would then be needed for the trackpoint, though I don't believe this is the case here.

Is I2C working now? I checked seem it work full function, except right click menu in trackpad (right click work with 2 finger tap instead), is it normally?

 

Screen Shot 2022-09-11 at 21.56.46.png

Screen Shot 2022-09-11 at 22.13.52.png

HackBook Pro-last.ioreg.zip

Screen Shot 2022-09-11 at 22.31.04.png

Screen Shot 2022-09-11 at 22.31.08.png

Screen Shot 2022-09-11 at 22.31.16.png

Edited by oldman20
add more pics
Link to comment
Share on other sites

 Share

×
×
  • Create New...