4847 lines · 137.4 KB · C
RawDownload
// SPDX-License-Identifier: GPL-2.0-or-later/* * *  Generic Bluetooth USB driver * *  Copyright (C) 2005-2008  Marcel Holtmann <marcel@holtmann.org> */ #include <linux/cpufeature.h>#include <linux/dmi.h>#include <linux/module.h>#include <linux/usb.h>#include <linux/usb/quirks.h>#include <linux/firmware.h>#include <linux/iopoll.h>#include <linux/of_device.h>#include <linux/of_irq.h>#include <linux/suspend.h>#include <linux/gpio/consumer.h>#include <linux/debugfs.h>#include <linux/unaligned.h> #include <net/bluetooth/bluetooth.h>#include <net/bluetooth/hci_core.h>#include <net/bluetooth/hci_drv.h> #include "btintel.h"#include "btbcm.h"#include "btrtl.h"#include "btmtk.h" #define VERSION "0.8" static bool disable_scofix;static bool force_scofix;static bool enable_autosuspend = IS_ENABLED(CONFIG_BT_HCIBTUSB_AUTOSUSPEND);static bool enable_poll_sync = IS_ENABLED(CONFIG_BT_HCIBTUSB_POLL_SYNC);static bool reset = true; static struct usb_driver btusb_driver; #define BTUSB_IGNORE			BIT(0)#define BTUSB_DIGIANSWER		BIT(1)#define BTUSB_CSR			BIT(2)#define BTUSB_SNIFFER			BIT(3)#define BTUSB_BCM92035			BIT(4)#define BTUSB_BROKEN_ISOC		BIT(5)#define BTUSB_WRONG_SCO_MTU		BIT(6)#define BTUSB_ATH3012			BIT(7)#define BTUSB_INTEL_COMBINED		BIT(8)#define BTUSB_INTEL_BOOT		BIT(9)#define BTUSB_BCM_PATCHRAM		BIT(10)#define BTUSB_MARVELL			BIT(11)#define BTUSB_SWAVE			BIT(12)#define BTUSB_AMP			BIT(13)#define BTUSB_QCA_ROME			BIT(14)#define BTUSB_BCM_APPLE			BIT(15)#define BTUSB_REALTEK			BIT(16)#define BTUSB_BCM2045			BIT(17)#define BTUSB_IFNUM_2			BIT(18)#define BTUSB_CW6622			BIT(19)#define BTUSB_MEDIATEK			BIT(20)#define BTUSB_WIDEBAND_SPEECH		BIT(21)#define BTUSB_INVALID_LE_STATES		BIT(22)#define BTUSB_QCA_WCN6855		BIT(23)#define BTUSB_INTEL_BROKEN_SHUTDOWN_LED	BIT(24)#define BTUSB_INTEL_BROKEN_INITIAL_NCMD BIT(25)#define BTUSB_INTEL_NO_WBS_SUPPORT	BIT(26)#define BTUSB_ACTIONS_SEMI		BIT(27)#define BTUSB_BARROT			BIT(28)#define BTUSB_BROKEN_EXT_SCAN		BIT(29) static const struct usb_device_id btusb_table[] = {	/* Generic Bluetooth USB device */	{ USB_DEVICE_INFO(0xe0, 0x01, 0x01) }, 	/* Generic Bluetooth AMP device */	{ USB_DEVICE_INFO(0xe0, 0x01, 0x04), .driver_info = BTUSB_AMP }, 	/* Generic Bluetooth USB interface */	{ USB_INTERFACE_INFO(0xe0, 0x01, 0x01) }, 	/* Apple-specific (Broadcom) devices */	{ USB_VENDOR_AND_INTERFACE_INFO(0x05ac, 0xff, 0x01, 0x01),	  .driver_info = BTUSB_BCM_APPLE | BTUSB_IFNUM_2 }, 	/* MediaTek MT76x0E */	{ USB_DEVICE(0x0e8d, 0x763f) }, 	/* Broadcom SoftSailing reporting vendor specific */	{ USB_DEVICE(0x0a5c, 0x21e1) }, 	/* Apple MacBookPro 7,1 */	{ USB_DEVICE(0x05ac, 0x8213) }, 	/* Apple iMac11,1 */	{ USB_DEVICE(0x05ac, 0x8215) }, 	/* Apple MacBookPro6,2 */	{ USB_DEVICE(0x05ac, 0x8218) }, 	/* Apple MacBookAir3,1, MacBookAir3,2 */	{ USB_DEVICE(0x05ac, 0x821b) }, 	/* Apple MacBookAir4,1 */	{ USB_DEVICE(0x05ac, 0x821f) }, 	/* Apple MacBookPro8,2 */	{ USB_DEVICE(0x05ac, 0x821a) }, 	/* Apple MacMini5,1 */	{ USB_DEVICE(0x05ac, 0x8281) }, 	/* AVM BlueFRITZ! USB v2.0 */	{ USB_DEVICE(0x057c, 0x3800), .driver_info = BTUSB_SWAVE }, 	/* Bluetooth Ultraport Module from IBM */	{ USB_DEVICE(0x04bf, 0x030a) }, 	/* ALPS Modules with non-standard id */	{ USB_DEVICE(0x044e, 0x3001) },	{ USB_DEVICE(0x044e, 0x3002) }, 	/* Ericsson with non-standard id */	{ USB_DEVICE(0x0bdb, 0x1002) }, 	/* Canyon CN-BTU1 with HID interfaces */	{ USB_DEVICE(0x0c10, 0x0000) }, 	/* Broadcom BCM20702B0 (Dynex/Insignia) */	{ USB_DEVICE(0x19ff, 0x0239), .driver_info = BTUSB_BCM_PATCHRAM }, 	/* Broadcom BCM43142A0 (Foxconn/Lenovo) */	{ USB_VENDOR_AND_INTERFACE_INFO(0x105b, 0xff, 0x01, 0x01),	  .driver_info = BTUSB_BCM_PATCHRAM }, 	/* Broadcom BCM920703 (HTC Vive) */	{ USB_VENDOR_AND_INTERFACE_INFO(0x0bb4, 0xff, 0x01, 0x01),	  .driver_info = BTUSB_BCM_PATCHRAM }, 	/* Foxconn - Hon Hai */	{ USB_VENDOR_AND_INTERFACE_INFO(0x0489, 0xff, 0x01, 0x01),	  .driver_info = BTUSB_BCM_PATCHRAM }, 	/* Lite-On Technology - Broadcom based */	{ USB_VENDOR_AND_INTERFACE_INFO(0x04ca, 0xff, 0x01, 0x01),	  .driver_info = BTUSB_BCM_PATCHRAM }, 	/* Broadcom devices with vendor specific id */	{ USB_VENDOR_AND_INTERFACE_INFO(0x0a5c, 0xff, 0x01, 0x01),	  .driver_info = BTUSB_BCM_PATCHRAM }, 	/* ASUSTek Computer - Broadcom based */	{ USB_VENDOR_AND_INTERFACE_INFO(0x0b05, 0xff, 0x01, 0x01),	  .driver_info = BTUSB_BCM_PATCHRAM }, 	/* Belkin F8065bf - Broadcom based */	{ USB_VENDOR_AND_INTERFACE_INFO(0x050d, 0xff, 0x01, 0x01),	  .driver_info = BTUSB_BCM_PATCHRAM }, 	/* IMC Networks - Broadcom based */	{ USB_VENDOR_AND_INTERFACE_INFO(0x13d3, 0xff, 0x01, 0x01),	  .driver_info = BTUSB_BCM_PATCHRAM }, 	/* Dell Computer - Broadcom based  */	{ USB_VENDOR_AND_INTERFACE_INFO(0x413c, 0xff, 0x01, 0x01),	  .driver_info = BTUSB_BCM_PATCHRAM }, 	/* Toshiba Corp - Broadcom based */	{ USB_VENDOR_AND_INTERFACE_INFO(0x0930, 0xff, 0x01, 0x01),	  .driver_info = BTUSB_BCM_PATCHRAM }, 	/* Intel Bluetooth USB Bootloader (RAM module) */	{ USB_DEVICE(0x8087, 0x0a5a),	  .driver_info = BTUSB_INTEL_BOOT | BTUSB_BROKEN_ISOC }, 	{ }	/* Terminating entry */}; MODULE_DEVICE_TABLE(usb, btusb_table); static const struct usb_device_id quirks_table[] = {	/* CSR BlueCore devices */	{ USB_DEVICE(0x0a12, 0x0001), .driver_info = BTUSB_CSR }, 	/* Broadcom BCM2033 without firmware */	{ USB_DEVICE(0x0a5c, 0x2033), .driver_info = BTUSB_IGNORE }, 	/* Broadcom BCM2045 devices */	{ USB_DEVICE(0x0a5c, 0x2045), .driver_info = BTUSB_BCM2045 }, 	/* Atheros 3011 with sflash firmware */	{ USB_DEVICE(0x0489, 0xe027), .driver_info = BTUSB_IGNORE },	{ USB_DEVICE(0x0489, 0xe03d), .driver_info = BTUSB_IGNORE },	{ USB_DEVICE(0x04f2, 0xaff1), .driver_info = BTUSB_IGNORE },	{ USB_DEVICE(0x0930, 0x0215), .driver_info = BTUSB_IGNORE },	{ USB_DEVICE(0x0cf3, 0x3002), .driver_info = BTUSB_IGNORE },	{ USB_DEVICE(0x0cf3, 0xe019), .driver_info = BTUSB_IGNORE },	{ USB_DEVICE(0x13d3, 0x3304), .driver_info = BTUSB_IGNORE }, 	/* Atheros AR9285 Malbec with sflash firmware */	{ USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE }, 	/* Atheros 3012 with sflash firmware */	{ USB_DEVICE(0x0489, 0xe04d), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0489, 0xe04e), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0489, 0xe076), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0489, 0xe078), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0489, 0xe095), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x04ca, 0x3006), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x04ca, 0x3007), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x04ca, 0x300b), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x04ca, 0x300d), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x04ca, 0x300f), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x04ca, 0x3010), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x04ca, 0x3014), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x04ca, 0x3018), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0930, 0x021c), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0930, 0x0220), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0930, 0x0227), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0b05, 0x17d0), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0cf3, 0x0036), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0cf3, 0x3008), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0cf3, 0x311d), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0cf3, 0x311e), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0cf3, 0x311f), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0cf3, 0x3121), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0cf3, 0x817a), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0cf3, 0x817b), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0cf3, 0xe003), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0cf3, 0xe005), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0cf3, 0xe006), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x13d3, 0x3395), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x13d3, 0x3402), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x13d3, 0x3423), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x13d3, 0x3472), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x13d3, 0x3474), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x13d3, 0x3487), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x13d3, 0x3490), .driver_info = BTUSB_ATH3012 }, 	/* Atheros AR5BBU12 with sflash firmware */	{ USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE }, 	/* Atheros AR5BBU12 with sflash firmware */	{ USB_DEVICE(0x0489, 0xe036), .driver_info = BTUSB_ATH3012 },	{ USB_DEVICE(0x0489, 0xe03c), .driver_info = BTUSB_ATH3012 }, 	/* QCA ROME chipset */	{ USB_DEVICE(0x0cf3, 0x535b), .driver_info = BTUSB_QCA_ROME |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0cf3, 0xe007), .driver_info = BTUSB_QCA_ROME |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0cf3, 0xe009), .driver_info = BTUSB_QCA_ROME |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0cf3, 0xe010), .driver_info = BTUSB_QCA_ROME |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0cf3, 0xe300), .driver_info = BTUSB_QCA_ROME |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0cf3, 0xe301), .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 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe092), .driver_info = BTUSB_QCA_ROME |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe09f), .driver_info = BTUSB_QCA_ROME |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe0a2), .driver_info = BTUSB_QCA_ROME |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x04ca, 0x3011), .driver_info = BTUSB_QCA_ROME |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x04ca, 0x3015), .driver_info = BTUSB_QCA_ROME |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x04ca, 0x3016), .driver_info = BTUSB_QCA_ROME |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x04ca, 0x301a), .driver_info = BTUSB_QCA_ROME |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x04ca, 0x3021), .driver_info = BTUSB_QCA_ROME |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x13d3, 0x3491), .driver_info = BTUSB_QCA_ROME |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x13d3, 0x3496), .driver_info = BTUSB_QCA_ROME |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x13d3, 0x3501), .driver_info = BTUSB_QCA_ROME |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x13d3, 0x3503), .driver_info = BTUSB_QCA_ROME |						     BTUSB_WIDEBAND_SPEECH }, 	/* QCA WCN6855 chipset */	{ USB_DEVICE(0x0489, 0xe0c7), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe0c9), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe0ca), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe0cb), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe0cc), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe0ce), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe0d0), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe0d6), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe0de), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe0df), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe0e1), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe0e3), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe0ea), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe0ec), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x04ca, 0x3022), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x04ca, 0x3023), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x04ca, 0x3024), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x04ca, 0x3a22), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x04ca, 0x3a24), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x04ca, 0x3a26), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x04ca, 0x3a27), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0cf3, 0xe600), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x10ab, 0x9108), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x10ab, 0x9109), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x10ab, 0x9208), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x10ab, 0x9209), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x10ab, 0x9308), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x10ab, 0x9309), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x10ab, 0x9408), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x10ab, 0x9409), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x10ab, 0x9508), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x10ab, 0x9509), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x10ab, 0x9608), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x10ab, 0x9609), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x10ab, 0x9f09), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x28de, 0x1401), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH }, 	/* QCA WCN785x chipset */	{ USB_DEVICE(0x0cf3, 0xe700), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe0fc), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe0f3), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe100), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe103), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe10a), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe10d), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe11b), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe11c), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe11f), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe141), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe14a), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe14b), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x0489, 0xe14d), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x13d3, 0x3623), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x13d3, 0x3624), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x2c7c, 0x0130), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x2c7c, 0x0131), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH },	{ USB_DEVICE(0x2c7c, 0x0132), .driver_info = BTUSB_QCA_WCN6855 |						     BTUSB_WIDEBAND_SPEECH }, 	/* Broadcom BCM2035 */	{ USB_DEVICE(0x0a5c, 0x2009), .driver_info = BTUSB_BCM92035 },	{ USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU },	{ USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU }, 	/* Broadcom BCM2045 */	{ USB_DEVICE(0x0a5c, 0x2039), .driver_info = BTUSB_WRONG_SCO_MTU },	{ USB_DEVICE(0x0a5c, 0x2101), .driver_info = BTUSB_WRONG_SCO_MTU }, 	/* IBM/Lenovo ThinkPad with Broadcom chip */	{ USB_DEVICE(0x0a5c, 0x201e), .driver_info = BTUSB_WRONG_SCO_MTU },	{ USB_DEVICE(0x0a5c, 0x2110), .driver_info = BTUSB_WRONG_SCO_MTU }, 	/* HP laptop with Broadcom chip */	{ USB_DEVICE(0x03f0, 0x171d), .driver_info = BTUSB_WRONG_SCO_MTU }, 	/* Dell laptop with Broadcom chip */	{ USB_DEVICE(0x413c, 0x8126), .driver_info = BTUSB_WRONG_SCO_MTU }, 	/* Dell Wireless 370 and 410 devices */	{ USB_DEVICE(0x413c, 0x8152), .driver_info = BTUSB_WRONG_SCO_MTU },	{ USB_DEVICE(0x413c, 0x8156), .driver_info = BTUSB_WRONG_SCO_MTU }, 	/* Belkin F8T012 and F8T013 devices */	{ USB_DEVICE(0x050d, 0x0012), .driver_info = BTUSB_WRONG_SCO_MTU },	{ USB_DEVICE(0x050d, 0x0013), .driver_info = BTUSB_WRONG_SCO_MTU }, 	/* Asus WL-BTD202 device */	{ USB_DEVICE(0x0b05, 0x1715), .driver_info = BTUSB_WRONG_SCO_MTU }, 	/* Kensington Bluetooth USB adapter */	{ USB_DEVICE(0x047d, 0x105e), .driver_info = BTUSB_WRONG_SCO_MTU }, 	/* RTX Telecom based adapters with buggy SCO support */	{ USB_DEVICE(0x0400, 0x0807), .driver_info = BTUSB_BROKEN_ISOC },	{ USB_DEVICE(0x0400, 0x080a), .driver_info = BTUSB_BROKEN_ISOC }, 	/* CONWISE Technology based adapters with buggy SCO support */	{ USB_DEVICE(0x0e5e, 0x6622),	  .driver_info = BTUSB_BROKEN_ISOC | BTUSB_CW6622}, 	/* Roper Class 1 Bluetooth Dongle (Silicon Wave based) */	{ USB_DEVICE(0x1310, 0x0001), .driver_info = BTUSB_SWAVE }, 	/* Digianswer devices */	{ USB_DEVICE(0x08fd, 0x0001), .driver_info = BTUSB_DIGIANSWER },	{ USB_DEVICE(0x08fd, 0x0002), .driver_info = BTUSB_IGNORE }, 	/* CSR BlueCore Bluetooth Sniffer */	{ USB_DEVICE(0x0a12, 0x0002),	  .driver_info = BTUSB_SNIFFER | BTUSB_BROKEN_ISOC }, 	/* Frontline ComProbe Bluetooth Sniffer */	{ USB_DEVICE(0x16d3, 0x0002),	  .driver_info = BTUSB_SNIFFER | BTUSB_BROKEN_ISOC }, 	/* Marvell Bluetooth devices */	{ USB_DEVICE(0x1286, 0x2044), .driver_info = BTUSB_MARVELL },	{ USB_DEVICE(0x1286, 0x2046), .driver_info = BTUSB_MARVELL },	{ USB_DEVICE(0x1286, 0x204e), .driver_info = BTUSB_MARVELL }, 	/* Intel Bluetooth devices */	{ USB_DEVICE(0x8087, 0x0025), .driver_info = BTUSB_INTEL_COMBINED },	{ USB_DEVICE(0x8087, 0x0026), .driver_info = BTUSB_INTEL_COMBINED },	{ USB_DEVICE(0x8087, 0x0029), .driver_info = BTUSB_INTEL_COMBINED },	{ USB_DEVICE(0x8087, 0x0032), .driver_info = BTUSB_INTEL_COMBINED },	{ USB_DEVICE(0x8087, 0x0033), .driver_info = BTUSB_INTEL_COMBINED },	{ USB_DEVICE(0x8087, 0x0035), .driver_info = BTUSB_INTEL_COMBINED },	{ USB_DEVICE(0x8087, 0x0036), .driver_info = BTUSB_INTEL_COMBINED },	{ USB_DEVICE(0x8087, 0x0037), .driver_info = BTUSB_INTEL_COMBINED },	{ USB_DEVICE(0x8087, 0x0038), .driver_info = BTUSB_INTEL_COMBINED },	{ USB_DEVICE(0x8087, 0x0039), .driver_info = BTUSB_INTEL_COMBINED },	{ USB_DEVICE(0x8087, 0x0040), .driver_info = BTUSB_INTEL_COMBINED }, /* Lizard Peak 2 */	{ USB_DEVICE(0x8087, 0x07da), .driver_info = BTUSB_CSR },	{ USB_DEVICE(0x8087, 0x07dc), .driver_info = BTUSB_INTEL_COMBINED |						     BTUSB_INTEL_NO_WBS_SUPPORT |						     BTUSB_INTEL_BROKEN_INITIAL_NCMD |						     BTUSB_INTEL_BROKEN_SHUTDOWN_LED },	{ USB_DEVICE(0x8087, 0x0a2a), .driver_info = BTUSB_INTEL_COMBINED |						     BTUSB_INTEL_NO_WBS_SUPPORT |						     BTUSB_INTEL_BROKEN_SHUTDOWN_LED },	{ USB_DEVICE(0x8087, 0x0a2b), .driver_info = BTUSB_INTEL_COMBINED },

Lines 1–500 of 4847.