Bluetooth not working on HP EliteBook 645 G10 - MT7922 "Failed to send wmt func ctrl (-22)"

Hi everyone,

I’m running openSUSE Leap 16.0 on an HP EliteBook 645 14 inch G10 Notebook PC and Bluetooth is completely non-functional. I cannot toggle it on from GNOME settings or bluetoothctl.

System info:

  • OS: openSUSE Leap 16.0
  • Kernel: 6.12.0-160000.33-default
  • Hardware: HP EliteBook 645 14 inch G10
  • Bluetooth chip: MediaTek MT7922 (USB ID: 0e8d:223c)
  • Firmware package: kernel-firmware-bluetooth-20251202-160000.1.1

The problem:
bluetoothctl reports “No default controller available” and the Bluetooth toggle in GNOME settings does nothing.

Kernel logs (sudo dmesg) show this error every time btusb loads:

Bluetooth: hci0: HW/SW Version: 0x008a008a, Build Time: 20251118163447
Bluetooth: hci0: Failed to send wmt func ctrl (-22)
Bluetooth: hci0: HCI Enhanced Setup Synchronous Connection command is advertised, but not supported.

What I have already tried:

  • Rebooting
  • Reloading btusb and btmtk modules
  • Toggling USB power/autosuspend via sysfs
  • Unbinding and rebinding the btusb driver
  • Disabling USB autosuspend (modprobe btusb enable_autosuspend=N reset=Y)
  • Bringing the WiFi interface (wlp2s0) down and up before reloading btusb

Nothing works. The error “-22 (EINVAL)” on “wmt func ctrl” appears consistently on every load.

Question:
Is there a known fix or workaround for this on Leap 16.0 / kernel 6.12? Is there a patched kernel available? Has anyone else with a MediaTek MT7922 combo chip faced this?

Any help is appreciated. Thanks!

I found this commit in kernel 6.12.91 changlog might fix my problem:

commit 0df9f458111481c0a9523b08171c97a61e026ec9
Author: Pauli Virtanen <pav@iki.fi>
Date:   Fri Apr 24 22:24:29 2026 +0300

    Bluetooth: btmtk: accept too short WMT FUNC_CTRL events
    
    commit e3ac0d9f1a205f33a43fba3b79ef74d2f604c78b upstream.
    
    MT7925 (USB ID 0e8d:e025) on fw version 20260106153314 sends WMT
    FUNC_CTRL events that are missing the status field.
    
    Prior to commit 006b9943b982 ("Bluetooth: btmtk: validate WMT event SKB
    length before struct access") the status was read from out-of-bounds of
    SKB data, which usually would result to success with
    BTMTK_WMT_ON_UNDONE, although I don't know the intent here.  The bounds
    check added in that commit returns with error instead, producing
    "Bluetooth: hci0: Failed to send wmt func ctrl (-22)" and makes the
    device unusable.
    
    Fix the regression by interpreting too short packet as status
    BTMTK_WMT_ON_UNDONE, which makes the device work normally again.
    
    Fixes: 634a4408c061 ("Bluetooth: btmtk: validate WMT event SKB length before struct access")
    Signed-off-by: Pauli Virtanen <pav@iki.fi>
    Tested-by: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com> # MT7922 (0489:e0e2)
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

I am not sure if I should wait for kernel bugfix update or follow this https://en.opensuse.org/SDB:InstallNewerKernel to install

This is a known regression for Mediatek cards. I would wait for the fix, meanwhile you might install an older kernel, for instance kernel-default-6.12.0-160000.32.1 which should be available in the standard repo.
Upgrading to kernel:stable, currently at 7.0.10, would certainly solve the Bluetooth problem but might cause other trouble depending on your system config, not worth the hassle in my view unless you are a “let’s tweak that” geeko :wink:

https://bugzilla.opensuse.org/show_bug.cgi?id=1266844

Marked your bugreport as duplicate.

I tested the kernel from the OBS Kernel:SL-16.0 repo, it resolved the Bluetooth issue, but the Wi-Fi interface disappeared entirely. I’ve since rolled back to kernel-default-6.12.0-160000.32.1, which works flawlessly. I’m not sure how a regression like this made it into kernel-default-6.12.0-160000.33.1 it makes me wonder whether sufficient testing was done before release. This kind of issue is concerning for the distro’s overall reliability. :confused:

Has nothing to do with the release testing of the distribution. This was an issue introduced into the kernel, that was then backported to every stable kernel. The issue was identified, and fixed in the kernel projects source and then that fix was also backported to ever stable kernel.

Instead of lamenting about some mystical ‘distro reliability issue’ maybe start with posting what wireless chipset your system has and any errors during boot.

Now I got the full picture about this regression and backport fix workflow, I wish if i didn’t remove that kernel from SL-16 repo so I can gather more logs about wireless issue. But I’m sticking to kernel-6.12.0-160000.32.1 so I can continue using my production laptop properly.

Here’s my wireless chipset:

zakaria@opensuse:~> lspci -nnk | grep -iA3 net
02:00.0 Network controller [0280]: MEDIATEK Corp. MT7922 802.11ax PCI Express Wireless Network Adapter [14c3:0616] (rev 01)
	Subsystem: MEDIATEK Corp. Device [14c3:223c]
	Kernel driver in use: mt7921e
	Kernel modules: mt7921e

While testing kernel 6.12.0-160000.265.g3d4fdf4-default from the Kernel:SL-16.0 repo as a workaround for this bug, I found that it introduces a new regression: the mt7921e module is completely absent from the kernel modules directory, causing total loss of Wi-Fi (and USB tethering).

System info:
OS: openSUSE Leap 16.0
Hardware: HP EliteBook 645 14 inch G10
Chipset: MediaTek MT7922 [14c3:0616] (rev 01)

Symptoms on 6.12.0-160000.265.g3d4fdf4-default:

  • MT7922 visible in lspci but shows no “Kernel driver in use” entry

  • mt7921e module completely missing:

    $ sudo modprobe mt7921e
    modprobe: FATAL: Module mt7921e not found in directory /usr/lib/modules/6.12.0-160000.265.g3d4fdf4-default

  • No mt79* entries in dmesg at all

  • Wi-Fi non-functional; USB tethering also broken

lspci output:
02:00.0 Network controller [0280]: MEDIATEK Corp. MT7922 802.11ax PCI Express Wireless Network Adapter [14c3:0616] (rev 01)
Subsystem: MEDIATEK Corp. Device [14c3:223c]
(no Kernel driver in use line)

Comparison:

  • 6.12.0-160000.32.1 (repo-oss): mt7921e loads correctly, Wi-Fi works, Bluetooth broken (this bug)
  • 6.12.0-160000.265.g3d4fdf4 (Kernel:SL-16.0): mt7921e missing entirely, Wi-Fi broken, Bluetooth works

I have reverted to 6.12.0-160000.32.1 to restore Wi-Fi functionality.

So open a bug report.

https://bugzilla.suse.com