|
|
|
@ -32,6 +32,7 @@ static bool disable_scofix;
|
|
|
|
|
static bool force_scofix;
|
|
|
|
|
static bool enable_autosuspend = IS_ENABLED(CONFIG_BT_HCIBTUSB_AUTOSUSPEND);
|
|
|
|
|
static bool reset = true;
|
|
|
|
|
static bool ignore_mediatek = true;
|
|
|
|
|
|
|
|
|
|
static struct usb_driver btusb_driver;
|
|
|
|
|
|
|
|
|
@ -439,7 +440,9 @@ static const struct usb_device_id blacklist_table[] = {
|
|
|
|
|
|
|
|
|
|
/* MediaTek Bluetooth devices */
|
|
|
|
|
{ USB_VENDOR_AND_INTERFACE_INFO(0x0e8d, 0xe0, 0x01, 0x01),
|
|
|
|
|
.driver_info = BTUSB_IGNORE },
|
|
|
|
|
.driver_info = BTUSB_MEDIATEK |
|
|
|
|
|
BTUSB_WIDEBAND_SPEECH |
|
|
|
|
|
BTUSB_VALID_LE_STATES },
|
|
|
|
|
|
|
|
|
|
/* Additional MediaTek MT7615E Bluetooth devices */
|
|
|
|
|
{ USB_DEVICE(0x13d3, 0x3560), .driver_info = BTUSB_MEDIATEK},
|
|
|
|
@ -470,6 +473,9 @@ static const struct usb_device_id blacklist_table[] = {
|
|
|
|
|
{ USB_DEVICE(0x04ca, 0x3802), .driver_info = BTUSB_MEDIATEK |
|
|
|
|
|
BTUSB_WIDEBAND_SPEECH |
|
|
|
|
|
BTUSB_VALID_LE_STATES },
|
|
|
|
|
{ USB_DEVICE(0x13d3, 0x3563), .driver_info = BTUSB_MEDIATEK |
|
|
|
|
|
BTUSB_WIDEBAND_SPEECH |
|
|
|
|
|
BTUSB_VALID_LE_STATES },
|
|
|
|
|
{ USB_DEVICE(0x13d3, 0x3564), .driver_info = BTUSB_MEDIATEK |
|
|
|
|
|
BTUSB_WIDEBAND_SPEECH |
|
|
|
|
|
BTUSB_VALID_LE_STATES },
|
|
|
|
@ -489,9 +495,6 @@ static const struct usb_device_id blacklist_table[] = {
|
|
|
|
|
BTUSB_WIDEBAND_SPEECH |
|
|
|
|
|
BTUSB_VALID_LE_STATES },
|
|
|
|
|
|
|
|
|
|
/* MediaTek MT7921e Bluetooth devices */
|
|
|
|
|
{ USB_DEVICE(0x13d3, 0x3563), .driver_info = BTUSB_IGNORE },
|
|
|
|
|
|
|
|
|
|
/* MediaTek MT7922A Bluetooth devices */
|
|
|
|
|
{ USB_DEVICE(0x0489, 0xe0d8), .driver_info = BTUSB_MEDIATEK |
|
|
|
|
|
BTUSB_WIDEBAND_SPEECH |
|
|
|
|
@ -4151,6 +4154,13 @@ static int btusb_probe(struct usb_interface *intf,
|
|
|
|
|
if (id->driver_info == BTUSB_IGNORE)
|
|
|
|
|
return -ENODEV;
|
|
|
|
|
|
|
|
|
|
if (ignore_mediatek &&
|
|
|
|
|
(id->driver_info & BTUSB_MEDIATEK)) {
|
|
|
|
|
dev_warn(&intf->dev, "MediaTek bluetooth device %04x:%04x ignored\n",
|
|
|
|
|
id->idVendor, id->idProduct);
|
|
|
|
|
return -ENODEV;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (id->driver_info & BTUSB_ATH3012) {
|
|
|
|
|
struct usb_device *udev = interface_to_usbdev(intf);
|
|
|
|
|
|
|
|
|
@ -4699,6 +4709,9 @@ MODULE_PARM_DESC(enable_autosuspend, "Enable USB autosuspend by default");
|
|
|
|
|
module_param(reset, bool, 0644);
|
|
|
|
|
MODULE_PARM_DESC(reset, "Send HCI reset command on initialization");
|
|
|
|
|
|
|
|
|
|
module_param(ignore_mediatek, bool, 0644);
|
|
|
|
|
MODULE_PARM_DESC(ignore_mediatek, "Ignore all MediaTek bluetooth devices");
|
|
|
|
|
|
|
|
|
|
MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
|
|
|
|
|
MODULE_DESCRIPTION("Generic Bluetooth USB driver ver " VERSION);
|
|
|
|
|
MODULE_VERSION(VERSION);
|
|
|
|
|