Fix: Bluetooth not working on Framework 16 with Pop!_OS 24.04
Hardware: Framework Laptop 16
OS: Pop!_OS 24.04
Chip: MediaTek MT7922 (AMD RZ616 — the default WiFi/BT card)
Symptom: Bluetooth toggle greyed out in Settings, bluetoothctl show returns “No default controller available”
Background
The MT7922 shares a single card for WiFi and Bluetooth. WiFi works fine out of the box, but Bluetooth fails silently on fresh installs. The root cause is a bug in the btmtk kernel driver that ships with System76’s custom kernel (7.0.9-76070009). The driver sends a WMT FUNC_CTRL command that the firmware rejects with error -22, preventing the Bluetooth controller from ever initialising.
The fix is switching to Ubuntu’s HWE-edge kernel (6.18+), which includes the patch btmtk: accept too short WMT FUNC_CTRL events that resolves this.
Confirm this is your issue
Run the following and check for the key error:
sudo dmesg | grep -i bluetooth | tail -20
If you see this line, this guide is for you:
Bluetooth: hci0: Failed to send wmt func ctrl (-22)
Also confirm your card:
lspci | grep -i network
Expected output:
02:00.0 Network controller: MEDIATEK Corp. MT7922 802.11ax PCI Express Wireless Network Adapter
Fix
Step 1 — Install the HWE-edge kernel
sudo apt update
sudo apt install linux-image-generic-hwe-24.04-edge linux-headers-generic-hwe-24.04-edge
This installs kernel 6.18+ from Ubuntu’s hardware enablement stack and will auto-update as newer kernels are released.
Step 2 — Set it as the default boot entry
sudo bootctl set-default Pop_OS-current.conf
Step 3 — Reboot
sudo reboot
Step 4 — Verify
After rebooting, confirm you’re on the new kernel and BT is working:
uname -r
# Should show 6.18.x or newer, not 7.0.9-76070009
bluetoothctl show
# Should show your controller details, not "No default controller available"
Why not the System76 kernel?
System76’s kernel (7.0.9-76070009) does not yet include the upstream btmtk fix. The HWE-edge kernel does. Both kernels support the MT7922 WiFi fine — this only affects Bluetooth initialisation.
The System76 kernel remains installed and available from the boot menu if you need it. When System76 ships the fix in a future kernel update, you can switch back if you prefer.
If Bluetooth breaks again after a future update
A kernel update via apt upgrade may reset the default boot entry back to the System76 kernel. If BT stops working after an update:
# Confirm the error is back
sudo dmesg | grep -i bluetooth | tail -20
# Check which kernel is running
uname -r
# If it shows 7.0.9-76070009, reset the default
sudo bootctl set-default Pop_OS-current.conf
sudo reboot
Additional note: boot menu
If you want to manually select a kernel at boot, hold Space during startup to bring up the systemd-boot menu. The entries are:
Pop!_OS(current) — HWE-edge kernel, BT workingPop!_OS(old kernel) — System76 kernel, BT broken
Tested on: Framework Laptop 16 | Pop!_OS 24.04 | MT7922 (0e8d:e616) | June 2026
Note: code and help was done with Claude.ai, but was absolutely the best explanation and fix I found for this specific issue.