@@ -66,6 +66,7 @@ static struct usb_driver btusb_driver;
6666#define BTUSB_BCM2045 0x40000
6767#define BTUSB_IFNUM_2 0x80000
6868#define BTUSB_CW6622 0x100000
69+ #define BTUSB_BCM_NO_PRODID 0x200000
6970
7071static const struct usb_device_id btusb_table [] = {
7172 /* Generic Bluetooth USB device */
@@ -170,6 +171,10 @@ static const struct usb_device_id btusb_table[] = {
170171 { USB_VENDOR_AND_INTERFACE_INFO (0x0930 , 0xff , 0x01 , 0x01 ),
171172 .driver_info = BTUSB_BCM_PATCHRAM },
172173
174+ /* Broadcom devices with missing product id */
175+ { USB_DEVICE_AND_INTERFACE_INFO (0x0000 , 0x0000 , 0xff , 0x01 , 0x01 ),
176+ .driver_info = BTUSB_BCM_PATCHRAM | BTUSB_BCM_NO_PRODID },
177+
173178 /* Intel Bluetooth USB Bootloader (RAM module) */
174179 { USB_DEVICE (0x8087 , 0x0a5a ),
175180 .driver_info = BTUSB_INTEL_BOOT | BTUSB_BROKEN_ISOC },
@@ -2899,6 +2904,19 @@ static int btusb_probe(struct usb_interface *intf,
28992904 if (id -> driver_info == BTUSB_IGNORE )
29002905 return - ENODEV ;
29012906
2907+ if (id -> driver_info & BTUSB_BCM_NO_PRODID ) {
2908+ struct usb_device * udev = interface_to_usbdev (intf );
2909+
2910+ /* For the broken Broadcom devices that show 0000:0000
2911+ * as USB vendor and product information, check that the
2912+ * manufacturer string identifies them as Broadcom based
2913+ * devices.
2914+ */
2915+ if (!udev -> manufacturer ||
2916+ strcmp (udev -> manufacturer , "Broadcom Corp" ))
2917+ return - ENODEV ;
2918+ }
2919+
29022920 if (id -> driver_info & BTUSB_ATH3012 ) {
29032921 struct usb_device * udev = interface_to_usbdev (intf );
29042922
0 commit comments