๐ง Complete solution for MediaTek MT7922 Bluetooth connectivity issues on Linux systems
- Problem Description
- Quick Fix
- Scripts Included
- Manual Solutions
- Supported Hardware
- Installation
- Usage
- Troubleshooting
- Educational Resources
- Contributing
- License
Many modern laptops ship with MediaTek MT7922 wireless adapters that combine WiFi and Bluetooth functionality. While WiFi typically works out-of-the-box on Linux distributions, Bluetooth often fails with these symptoms:
- โ "No default controller available" in
bluetoothctl - โ No Bluetooth option in system settings
- โ Empty output from
bluetoothctl list - โ Hardware detected by
lsusbbut non-functional Bluetooth - โ Bluetooth works intermittently or stops after suspend
- Missing or incorrect Bluetooth firmware
- Improper driver binding (btusb/btmtk)
- USB power management issues
- Wrong kernel module loading order
- Outdated Linux kernel (<6.10)
# Check your hardware
lsusb | grep -i mediatek
lspci | grep -i mediatek
# Check kernel version (6.10+ recommended)
uname -rwget -O - https://raw.githubusercontent.com/mohdsami91/mt7922-bluetooth-fix/main/bluetooth_troubleshoot_script.sh | bashOr download and run manually:
git clone https://github.com/mohdsami91/mt7922-bluetooth-fix.git
cd mt7922-bluetooth-fix
chmod +x bluetooth_troubleshoot_script.sh
./bluetooth_troubleshoot_script.shMain fix script - Comprehensive automated solution
Features:
- โ Hardware detection and validation
- โ Automatic firmware download and installation
- โ Module loading and service restart
- โ USB power management fixes
- โ RFKILL unblocking
- โ Status verification and reporting
Usage:
./bluetooth_troubleshoot_script.shAdvanced diagnostics - Deep hardware and driver analysis
Features:
- ๐ Detailed hardware detection
- ๐ Driver binding analysis
- ๐ Firmware status checking
- ๐ USB interface examination
- ๐ Kernel message analysis
Usage:
./bluetooth_diagnostic_commands.shLegacy fix script - Basic firmware and module management
Usage:
./mt7922_bluetooth_fix.shKernel upgrade helper - For systems with older kernels
Usage:
./kernel_upgrade_script.shIf scripts don't work, try these manual fixes:
# Get your device Product ID
lsusb | grep -i mediatek
# Force bind to btusb driver (replace XXXX with your product ID)
echo '0e8d XXXX' | sudo tee /sys/bus/usb/drivers/btusb/new_id# Download latest firmware
cd /tmp
wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/mediatek/BT_RAM_CODE_MT7922_1_1_hdr.bin
# Install firmware
sudo mkdir -p /lib/firmware/mediatek
sudo cp BT_RAM_CODE_MT7922_1_1_hdr.bin /lib/firmware/mediatek/
# Reload modules
sudo modprobe -r btusb btmtk
sudo modprobe btmtk
sudo modprobe btusb# Disable USB auto-suspend for MediaTek devices
for device in /sys/bus/usb/devices/*/idVendor; do
if [ -f "$device" ] && [ "$(cat $device)" = "0e8d" ]; then
echo 'on' | sudo tee $(dirname $device)/power/control
fi
done# Load modules in correct order
sudo modprobe -r btusb btmtk btintel btrtl
sudo modprobe bluetooth
sudo modprobe btmtk
sudo modprobe btusb
sudo systemctl restart bluetooth| Device | Vendor ID | Product ID | Status |
|---|---|---|---|
| MT7922 | 0e8d | 7961 | โ Supported |
| MT7922 | 0e8d | 7922 | โ Supported |
| MT7921 | 0e8d | 7961 |
- Linux Mint 21.3+ โ
- Ubuntu 22.04+ โ
- Pop!_OS 22.04+ โ
- Kernel 6.14+ โ (Full support)
- Kernel 6.10-6.13
โ ๏ธ (Partial support) - Kernel <6.10 โ (Not supported)
git clone https://github.com/mohdsami91/mt7922-bluetooth-fix.git
cd mt7922-bluetooth-fixchmod +x *.sh./bluetooth_diagnostic_commands.shThis will show detailed information about your hardware and help identify specific issues.
./bluetooth_troubleshoot_script.shThis script will attempt to fix most common issues automatically.
sudo reboot# Check if controller is detected
bluetoothctl list
# Start scanning for devices
bluetoothctl
power on
agent on
default-agent
scan on-
Check kernel version:
uname -r # If < 6.10, run: ./kernel_upgrade_script.sh -
Verify hardware detection:
lsusb | grep -i mediatek dmesg | grep -i bluetooth | tail -10
-
Check firmware loading:
dmesg | grep -i firmware ls -la /lib/firmware/mediatek/ -
Manual USB reset:
sudo usb_modeswitch -v 0e8d -p XXXX --reset-usb
| Error | Solution |
|---|---|
| "No default controller available" | Run bluetooth_troubleshoot_script.sh |
| "Operation not permitted" | Check RFKILL: sudo rfkill unblock all |
| "Firmware loading failed" | Manual firmware installation (see above) |
| "Device not found" | USB power management fix |
This repository also includes educational materials for understanding Linux Bluetooth driver development:
mt7922_bluetooth.c- Basic driver structure (educational only)Makefile- Build system for kernel modules- Driver development documentation
btmtk kernel driver.
Contributions are welcome! Here's how you can help:
- Run
./bluetooth_diagnostic_commands.sh - Create an issue with the full output
- Include your system information:
uname -a lsb_release -a lsusb | grep -i mediatek
- Fork the repository
- Test scripts on your hardware
- Update hardware compatibility table
- Submit a pull request
- Follow existing script structure
- Add error handling and logging
- Test on multiple distributions
- Update documentation
This project is licensed under the MIT License - see the LICENSE file for details.
- Linux kernel developers working on MediaTek support
- Community members who reported and tested fixes
- MediaTek