bluetoothctl (from bluez 5.55) cannot find the bluetooth controller on my ar5b22 wireless adapter. However /sys/class/bluetooth/hci0 points to the correct device. rfkill would toggle blocking/unblocking state without problem, but bluez won't be able to find the controller regardless.
Steps to reproduce:
1. Boot up the system
2. Run 'bluetoothctl list'. This will print nothing on my system since this ath3012 is the only bluetooth adapter present, but wasn't found.
3. I checked /sys/class/bluetooth/hci0, where the device file pointed to the correct USB device number.
[ 11.830504] Bluetooth: Core ver 2.22
[ 11.836192] Bluetooth: HCI device and connection manager initialized
[ 11.838836] Bluetooth: HCI socket layer initialized
[ 11.841382] Bluetooth: L2CAP socket layer initialized
[ 11.843458] Bluetooth: SCO socket layer initialized
[ 11.964674] Bluetooth: hci0: don't support firmware rome 0x11020000
[ 16.815785] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[ 16.815787] Bluetooth: BNEP filters: protocol multicast
[ 16.815794] Bluetooth: BNEP socket layer initialized
The specific piece of hardware from lsusb and lspci:
Bus 001 Device 002: ID 13d3:3395 IMC Networks
23:00.0 Network controller: Qualcomm Atheros AR9462 Wireless Network Adapter (rev 01)
Notably this issue is not present on kernel 5.9.x and looks very similar to bug ID 199271. A regression?
Apparently this ver_rom 0x11020000 has never been recorded in qca_devices_table defined in btusb.c.
Before 5.10 (i.e. 5.9.x and possibly earlier), the function btusb_setup_qca() will short circuit and return 0 before querying the device table (the following from 5.9.16, btusb.c:3627):
ver_rom = le32_to_cpu(ver.rom_version);
/* Don't care about high ROM versions */
if (ver_rom & ~0xffffU)
Since this check is removed in 5.10.x due to added support of WCN6855 (which has a high ROM version), the driver would return -ENODEV as this 0x11020000 doesn't exist in qca_devices_table in the first place.
I am not sure how this should be resolved. We could check whether ver_rom == 0x11020000 and directly return 0 (and the card would work after that), but I think this is a very dirty approach.
*** This bug has been marked as a duplicate of bug 210681 ***