The Microsoft Surface Laptop 3 (AMD edition) uses a Qualcomm Atheros QCA6174 Bluetooth USB controller with USB ID 0cf3:e303. Without the BTUSB_QCA_ROME quirk, btusb binds to it as a generic controller and never loads the QCA rampatch and NVM firmware, leaving the controller in unpatched ROM mode where BLE connections fail with "unexpected event for opcode 0x2005" errors. With the quirk applied, the controller is set up correctly: Bluetooth: hci0: using rampatch file: qca/rampatch_usb_00000302.bin Bluetooth: hci0: QCA: patch rome 0x302 build 0x3e8, firmware rome 0x302 build 0x111 Bluetooth: hci0: using NVM file: qca/nvm_usb_00000302.bin Add 0cf3:e303 with BTUSB_QCA_ROME | BTUSB_WIDEBAND_SPEECH. T: Bus=01 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#= 3 Spd=12 MxCh= 0 D: Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1 P: Vendor=0cf3 ProdID=e303 Rev=00.01 C: #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA I: If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms I: If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms Cc: stable@vger.kernel.org Signed-off-by: Daan Bouwman --- Notes: The commit message was drafted with Claude (claude-opus-5-5); I reviewed the change and tested it on my Surface Laptop 3 (AMD). Tested on v7.2.15 with this same ID entry applied to btusb, after a cold boot with my out-of-tree workaround disabled: - stock btusb: no rampatch/NVM loaded, HCI version 7, BLE mouse fails with "unexpected event for opcode 0x2005" - patched btusb: rampatch and NVM 0x302 loaded, HCI version 8, BLE mouse connects and reconnects, no 0x2005 errors drivers/bluetooth/btusb_main.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/bluetooth/btusb_main.c b/drivers/bluetooth/btusb_main.c index 95398e2ca..f44b44382 100644 --- a/drivers/bluetooth/btusb_main.c +++ b/drivers/bluetooth/btusb_main.c @@ -288,6 +288,8 @@ static const struct usb_device_id quirks_table[] = { BTUSB_WIDEBAND_SPEECH }, { USB_DEVICE(0x0cf3, 0xe301), .driver_info = BTUSB_QCA_ROME | BTUSB_WIDEBAND_SPEECH }, + { USB_DEVICE(0x0cf3, 0xe303), .driver_info = BTUSB_QCA_ROME | + BTUSB_WIDEBAND_SPEECH }, { USB_DEVICE(0x0cf3, 0xe360), .driver_info = BTUSB_QCA_ROME | BTUSB_WIDEBAND_SPEECH }, { USB_DEVICE(0x0cf3, 0xe500), .driver_info = BTUSB_QCA_ROME | -- 2.56.1