[PATCH bluetooth] btmtk: fix MT7927 / MT6639 firmware loading and section filtering
From: Marliére Jean-François
Date: Sun Feb 08 2026 - 15:31:18 EST
Hi,
Bluetooth on MediaTek MT7927 (hardware variant 0x6639) is currently
broken on Linux.
The device is detected (USB VID:PID 0489:e13a, Foxconn/Hon Hai), but
initialization
fails with "Unsupported hardware variant (00006639)" or the chip hangs
during
firmware download.
I investigated this issue by comparing Linux behavior with USB captures
from the
Windows driver and identified three root causes in btmtk:
1. Hardware variant 0x6639 is missing from btmtk switch/case handling
2. Incorrect firmware naming is used (_1_1_hdr.bin instead of
_2_1_hdr.bin)
3. Critical issue: non-Bluetooth firmware sections are sent to the
chip, which
causes an irreversible BT subsystem hang (requires full power cycle)
The Windows driver only downloads firmware sections where
(dlmodecrctype & 0xff) == 0x01. The MT6639 firmware contains 9
sections, but only
the first 5 are Bluetooth-related. Sending the remaining sections
(WiFi/other)
causes the failure observed on Linux.
This patch:
- Adds support for hardware variant 0x6639
- Uses the correct firmware naming format for MT6639
- Filters firmware sections to only download Bluetooth sections
(dlmodecrctype & 0xff == 0x01), matching Windows driver behavior
Tested on:
- Debian 13 (Trixie)
- Kernel 6.12.63
- ASUS ProArt X870E-CREATOR-WIFI motherboard
- MediaTek MT7927 / MT6639 Bluetooth
A full technical analysis, reproduction steps, and testing details are
available here:
https://gitlab.com/jfmarliere/linux-driver-mediatek-mt7927-bluetooth
Please let me know if you would prefer this split into multiple patches
or if
additional testing/logs are required.
Best regards,
Jean-François Marlière