BlueToolFixup: Add Fast-Connect A2DP patch to fix "Connected but No Sound" issue for third-party controllers on Apple Headphones - #38
Conversation
…ound" issue for third-party controllers on Apple Headphones
|
Tested with the fork's release, thoroughly checked, works beautifully. Doesn't give me that headache. |
Thanks for testing! Glad it helps! |
|
This is working for me with AirPods Pro 2 and AC 9260 on macOS 15.7.5 |
- update opencore to 1.0.7 - add fix for airpods audio output via BT (acidanthera/BrcmPatchRAM#38) - try to force APSM for a few more devices to improve idle power usage (still uses like 20W on idle) - change SMBIOS model to MacBookPro16,4 as that matches my hardware better
|
13.7.8 (22H730) AirPods Pro 2 AX200 有效 |
Cheers! |
|
26.4.1, Dell Precision 3640 (AX201) rarely had sound with AirPods Pro 2, with this patch always has. |
|
15.3.1 (24D70) AirPods Pro 2 AX201 测试有效,终于正常了。之前一直在排查USB定制和OCLP,花了不少时间。直到GPT提到了有不少人遇到这个问题。舒服了。 |
Summary
This PR adds an opt-in runtime patch for
bluetoothdthat resolves the infamous "Connected but No Sound" issue when using third-party Bluetooth controllers (e.g. Intel) with modern Apple headphones equipped with W1/H1/H2 chips (AirPods Pro 2, AirPods Pro 3, etc.).Problem
Apple's
bluetoothdrelies onHCI_Read_Clockduring the A2DP Fast-Connect reconnection path. Third-party controllers that do not implement or fail to respond to this HCI command in time causebluetoothdto abort the audio pipeline setup, resulting in a successful Bluetooth connection with zero audio output. The system log shows:Solution
The patch identifies the conditional branch (
test + je) that gates the A2DP audio bring-up path based on theHCI_Read_Clockresult, and replaces it with an unconditional jump (xor + jmp) to force the success path.Two pattern families are defined to cover all supported macOS versions:
14_0%r14d45 85 F6 74 2512_0%ebx85 DB 74 25Both patterns were verified by extracting
bluetoothdbinaries from official Apple Recovery images and performing byte-by-byte comparison.Usage
The patch is opt-in and activated by the following boot argument:
No existing behavior is changed unless this boot-arg is explicitly set.
Testing
8086:06f0:8086:0074(Comet Lake PCH CNVi WiFi)Changes
BrcmPatchRAM/BlueToolFixup.cpp: AddedkFastConnectA2DPGate*pattern arrays, version-aware patching logic (>= Sonoma/>= Monterey), and the-btlfxa2dpcheckboot-arg check.Documentation
A detailed technical write-up of the reverse-engineering process, including the automation scripts (
find_gate.py,verify_gates.py) used to locate and validate the patch signatures, is available at:🔗 BlueToolFixup-A2DP-Documentation