Contribute
Register

[Solution] Trackpad VoodooI2CHID Conflicts with ACPIBatteryManager kext

Status
Not open for further replies.
Joined
Nov 10, 2015
Messages
105
Motherboard
Clevo 970EF Defiance VI - OpenCore
CPU
i7-8750H/HM370
Graphics
UHD630, RTX 2070, 1920x1080
Mac
  1. iMac
  2. MacBook Pro
  3. Mac mini
Classic Mac
  1. 128K
  2. iMac
  3. PowerBook
Mobile Phone
  1. iOS
Some users are having a conflict problem with VoodooI2CHID in polling-mode & ACPIBatteryManager (1.90.1).
Me too. (GPIO correctly pinned...)
With AC power disconnected, the cursor is "micro-stopping" and "crazy-jumping" with a cycle of one second.

Conflict explanation:
ACPIBatteryManager is polling the battery status in order to update the battery data with a cycle of one second.
When the battery is charged, ACPIBatteryManager stops polling. This is the reason why we're facing the problem during discharging only.
The first task performed by the kext during polling, it is calling the _STA method of device BAT0 to know whether the battery is present and operating.Then it calls other methods _BIF, _BST, ...

The problem is just related to _STA method.
Most probably, your BAT0 (or BAT1, check your DSDT) _STA method looks like mine:
Code:
            Method (_STA, 0, NotSerialized)  // _STA: Status
            {
                If (^^PCI0.LPCB.EC.ECOK)
                {
                    Sleep (0x012C)
                    If (^^PCI0.LPCB.EC.BAT0)
                    {
                        Return (0x1F)
                    }
                    Else
                    {
                        Return (0x0F)
                    }
                }
                Else
                {
                    Return (0x0F)
                }
            }
As you can see, a Sleep function of 300mS is called every time... No good.
This is useful during start-up only to give PC (battery) enough time to set up.
During battery discharging the ACPIBatteryManager starts polling and this sleep function generates the "glitch" in the cursor.

Solution:
Adding a variable to perform the Sleep at the first time resolved the problem.
No more crazy-jumping cursor...
Patch your _STA method as below:
Code:
            Name (DOST, Zero)
            Method (_STA, 0, NotSerialized)  // _STA: Status
            {
                If (^^PCI0.LPCB.EC.ECOK)
                {
                    If (LNot (DOST))
                    {
                        Sleep (0x012C)
                        Store (One, DOST)
                    }

                    If (^^PCI0.LPCB.EC.BAT0)
                    {
                        Return (0x1F)
                    }
                    Else
                    {
                        Return (0x0F)
                    }
                }
                Else
                {
                    Return (0x0F)
                }
            }
Note that if DOST name is already used in your ACPI, change it with another one (YSTA, WSTA, ...)
Alternatively, Sleep statement can be deleted at all.

Hope this could help someone...
 
Last edited:
Hello. Can you write me some steps to fix this error? I'm not so proficient at this. Thank you very much.
 
Hello. Can you write me some steps to fix this error? I'm not so proficient at this. Thank you very much.
You have to be familiar with ACPI patching.
Carefully follow the below guide and extract the ACPI files using Clover

Then, your DSDT file needs to be patched according to post #1 and copied in CLOVER/ACPI/patched folder.
 
Thanks and one more question. after repair do I delete ACPIBatteryManager.kext or keep?
 
Thanks and one more question. after repair do I delete ACPIBatteryManager.kext or keep?
keep it if you want battery status to work
 
Hello. so I solved the problem with VirtualSMC
 
Status
Not open for further replies.
Back
Top