TL;DR: My battery polling works, but once it hits 100% it seems ACPI stops letting the battery indicator know it's done and status changes after reaching 100% get ignored. Most of the setup is standard procedure following the OpenCore installation guide, but it just doesn't work perfectly out of the box.
Okay, long story short: I've been hackintoshing for a long time. Had this very machine on Sierra a year or two ago, with everything working. I'm not a noob, I've been able to get power management, map USB ports correctly, backlight, sleep, sound, wifi, blah blah.
So I tried again using OpenCore recently, managed to get this thing running with Big Sur after lots of reading. (OpenCore is pretty freaking awesome as an aside)
The area that I'm stuck is the battery. My laptop is a single battery, typical ACPI patching calls for BAT1 so very typical patches work.
The part that's interesting: My battery indicator WORKS. If I start off with the battery at less than 100%, it works fine. The polling interval is slow, so if I unplug, it takes a good 30-40 seconds before the indicator shows things are changing status. Honestly, I don't care about that. Not really a big deal.
When I'm plugged in, as soon as my battery hits 100%, it gets locked at 100%. Unplugging afterwards leaves it stuck in the whole "Battery: 100%" and "Power Source: Power Adapter".
When I was using Clover previously, RehabMan's battery patches worked just fine once I did get them working. Since moving to OpenCore, I'm using the ECEnabler.kext in conjunction with SMCBatteryManager.kext. Again, this works (slowly) until things charge fully and get stuck.
If I reboot, things get updated and it's all working again... Until I fully charge.
Another side note: Normally the backlight would change when it detects a change in power state on a real mac. Yes, you can turn that off, but I intentionally left it on hoping to get some sort of clue where to look. That also doesn't work regardless of the battery status. I'm guessing the backlight pulls the battery status information from somewhere else. No biggie.
I started reading up on the ACPI update process as well as what VirtualSMC is doing in the background. Something that showed up was this:
https://github.com/acidanthera/VirtualSMC/blob/master/Docs/Battery%20Information%20Supplement.md
The interesting part:
Current issues (won't solve): When battery's fully charged or not charging, temperature won't be updated since no ACPI polling happens.
Okay, so I know this applies directly to additional information on battery states and temperature, but since I was having other issues (Delayed polling, backlight not detecting changes to battery state, and of course the getting stuck at 100% until reboot) I thought it might be a clue for where I can start looking.
Does anyone have ANY ideas of where I can start looking? Obviously other people using a similar setup in terms of kext's are likely working so it's probably not so much the actual kext's, and I'm guessing there's very little in the config.plist that will directly apply.
I have the stereotypical skylake presets for my hardware (though I'm happy to include all files if requested) but I wanted to see if anyone had suggestions.
Ideally I would like to try and fix this myself. I want to understand 100% exactly what I'm doing and not just blindly applying patches. I've been reading a bunch of RehabMan's stuff from 'back in the day' with Clover and I get most of it, but a lot just doesn't seem to apply here.
Any suggestions at all? I've redone this build about 4 or 5 times now and I've ignored this problem each time, and would like to finally address it correctly.

Post a Comment