Skip to content

BlueToolFixup: Add Fast-Connect A2DP patch to fix "Connected but No Sound" issue for third-party controllers on Apple Headphones#38

Open
hexxyan wants to merge 1 commit intoacidanthera:masterfrom
hexxyan:fix-a2dp-fastconnect
Open

BlueToolFixup: Add Fast-Connect A2DP patch to fix "Connected but No Sound" issue for third-party controllers on Apple Headphones#38
hexxyan wants to merge 1 commit intoacidanthera:masterfrom
hexxyan:fix-a2dp-fastconnect

Conversation

@hexxyan
Copy link
Copy Markdown

@hexxyan hexxyan commented Apr 7, 2026

Summary

This PR adds an opt-in runtime patch for bluetoothd that 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.).

Related issue: OpenIntelWireless/IntelBluetoothFirmware#462

Problem

Apple's bluetoothd relies on HCI_Read_Clock during the A2DP Fast-Connect reconnection path. Third-party controllers that do not implement or fail to respond to this HCI command in time cause bluetoothd to abort the audio pipeline setup, resulting in a successful Bluetooth connection with zero audio output. The system log shows:

Failed to read BT clock

Solution

The patch identifies the conditional branch (test + je) that gates the A2DP audio bring-up path based on the HCI_Read_Clock result, 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:

Pattern macOS Versions Register Signature Head
14_0 14 (Sonoma), 15 (Sequoia), 26 (Tahoe) %r14d 45 85 F6 74 25
12_0 12 (Monterey), 13 (Ventura) %ebx 85 DB 74 25

Both patterns were verified by extracting bluetoothd binaries from official Apple Recovery images and performing byte-by-byte comparison.

Usage

The patch is opt-in and activated by the following boot argument:

-btlfxa2dpcheck

No existing behavior is changed unless this boot-arg is explicitly set.

Testing

Item Detail
macOS Version macOS 26.4 Tahoe
Bluetooth Adapter Intel AX201 160MHz (Wi-Fi 6)
PCI ID 8086:06f0:8086:0074 (Comet Lake PCH CNVi WiFi)
Test Device AirPods Pro 2 (H2 chip)
Result ✅ A2DP audio stream established successfully. No more "Failed to read BT clock" abort.

Note: macOS 12–15 patterns are derived from binary analysis of official Apple Recovery images and are theoretically correct, but have not yet been tested on physical hardware running those versions. Community testing and feedback is welcome.

Changes

  • BrcmPatchRAM/BlueToolFixup.cpp: Added kFastConnectA2DPGate* pattern arrays, version-aware patching logic (>= Sonoma / >= Monterey), and the -btlfxa2dpcheck boot-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

…ound" issue for third-party controllers on Apple Headphones
@Ardaninho
Copy link
Copy Markdown

Tested with the fork's release, thoroughly checked, works beautifully. Doesn't give me that headache.
Tested on 26.4, Intel AX200 and AirPods Pro 3.

@hexxyan
Copy link
Copy Markdown
Author

hexxyan commented Apr 8, 2026

Tested with the fork's release, thoroughly checked, works beautifully. Doesn't give me that headache.
Tested on 26.4, Intel AX200 and AirPods Pro 3.

Thanks for testing! Glad it helps!

@sambow23
Copy link
Copy Markdown

sambow23 commented Apr 8, 2026

This is working for me with AirPods Pro 2 and AC 9260 on macOS 15.7.5

sambow23 added a commit to sambow23/Dell-Precision-5540-macOS that referenced this pull request Apr 8, 2026
- 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants