If Bluetooth silently disappeared on your laptop after a big apt full-upgrade — the toggle in your desktop’s quick settings is greyed out, and bluetoothctl show just says No default controller available — this post walks through how to confirm the exact cause and fix it. It cost me a full afternoon of debugging on an HP EliteBook 865 16″ G11, so hopefully this saves someone else the trouble.
The symptom
Bluetooth just isn’t there. Not blocked, not disabled — actually missing. Your desktop environment shows the Bluetooth control as unavailable, and the command line agrees:
Confirm it’s this exact bug
First, rule out the boring causes — a hardware/software rfkill block, or the driver simply not being loaded:
If hci0 shows up unblocked and the btusb/btmtk/btintel/btrtl/btbcm modules are all loaded, the hardware and driver stack look fine on paper — so the real story is in the kernel log. Note that plain dmesg often won’t show it anymore once the system has been up for a while (its ring buffer rotates and evicts early-boot messages), so go straight to the persistent journal for the current boot:
If you’re hitting the same bug, you’ll see a full kernel Oops right after hci0: HW/SW Version is logged — a BUG: kernel NULL pointer dereference inside a workqueue called hci_power_on, with a call trace running through:
hci_power_on → hci_dev_do_open → hci_dev_open_sync → hci_dev_init_sync → hci_dev_setup_sync
btusb_mtk_setup → btmtk_setup_firmware_79xx → btmtk_usb_hci_wmt_sync
usb_autopm_get_interface → __pm_runtime_resume (crash here)
The crash is fully deterministic — it happens on every single boot, the moment bluetoothd tries to power the adapter on, before it can ever register a controller. This is not something caused by the update itself breaking a config; the update was just a red herring that happened to coincide with when I noticed it.
Affected hardware: laptops with a MediaTek MT7921/MT7922 Wi-Fi+Bluetooth combo chip (the btusb/btmtk driver, “79xx” firmware family). Confirmed on an HP EliteBook 865 16″ G11 running Ubuntu 24.04 “Noble” on the generic kernel track (6.8.0-139-generic) — but this is a driver bug, not something HP- or EliteBook-specific, so it likely affects other MT7921/MT7922 laptops too.
Root cause
It’s a known bug in the kernel’s btmtk driver — uninitialized/mismanaged state in the MediaTek firmware setup path around USB power management. Ubuntu already tracks a closely related fix (Launchpad bug #2092473, “Fix system hang issue caused by the btmtk driver”) which cherry-picks upstream commit 61c5a3def90a (“Bluetooth: btmtk: adjust the position to init iso data anchor”). The important detail: that fix landed in Ubuntu’s linux-oem kernel line, not the generic one most desktop installs run — the OEM kernel track gets hardware-enablement and driver fixes for newer laptop models well before they trickle down to generic.
The fix: switch to the OEM kernel
Check what’s available for your release, and grab the newest one:
After rebooting, confirm you’re actually running it:
Then the real test:
A real controller with Powered: yes — that’s the fix confirmed.
Make sure it actually boots into it
Installing the OEM kernel doesn’t automatically make GRUB default to it. Check this first:
If it shows GRUB_DEFAULT=0 (or any fixed number), GRUB will always boot the first menu entry no matter what you set as the saved default — so fix that first, then point it at the new kernel:
Adjust the exact kernel version and menu entry text to match your own system — list what’s actually in your GRUB menu with:
One more gotcha: if GRUB_TIMEOUT_STYLE=hidden is set, GRUB won’t even show you a menu — it just silently boots the saved entry after the timeout. If you’re used to pressing a key during boot (say, from an earlier recovery-mode session), you might end up hand-picking a kernel out of habit even though the saved default was already correct. Check /boot/grub/grubenv for saved_entry to see what’s actually set before assuming it’s broken.
One more thing: a “frozen” boot right after a big upgrade
Separately from the Bluetooth issue — if your screen seems to hang forever on the boot splash logo right after a large apt full-upgrade, don’t panic and don’t force a hard power-off immediately. Two things worth checking first:
- Press
Ctrl+Alt+F3 to switch to a text console. If you land on a working login prompt, the system actually finished booting — it’s just the graphical splash (Plymouth) that’s stuck on-screen, which is purely cosmetic.
- If you have a SIM/WWAN-equipped laptop with the same MediaTek family of chips, check
journalctl -b 0 | grep -i modem. ModemManager can get stuck in an infinite respawn loop trying (and failing) to initialize a mtk_t7xx modem, spawning a new modem object every couple of seconds — noisy and wasteful, but not usually what’s actually blocking the boot.
Neither of these turned out to be related to the Bluetooth crash above — but they showed up in the same troubleshooting session and are worth ruling out before assuming your system is broken.
tl;dr
- Confirm the crash:
journalctl -k -b 0 | grep -i -B2 -A10 "bluetooth\|hci0\|btmtk\|btusb" shows a NULL pointer Oops in btmtk_setup_firmware_79xx.
- Install the newest OEM kernel:
sudo apt install linux-oem-24.04d (check apt search linux-oem for the current newest).
- Make sure GRUB actually defaults to it:
GRUB_DEFAULT=saved + GRUB_SAVEDEFAULT=true in /etc/default/grub, then grub-set-default + update-grub.
- Reboot, confirm with
uname -r, then bluetoothctl show should finally show a powered controller.
Hope this saves someone else the afternoon it cost me.