@@ -66,6 +66,7 @@ static struct usb_driver btusb_driver;
66
66
#define BTUSB_BCM2045 0x40000
67
67
#define BTUSB_IFNUM_2 0x80000
68
68
#define BTUSB_CW6622 0x100000
69
+ #define BTUSB_BCM_NO_PRODID 0x200000
69
70
70
71
static const struct usb_device_id btusb_table [] = {
71
72
/* Generic Bluetooth USB device */
@@ -170,6 +171,10 @@ static const struct usb_device_id btusb_table[] = {
170
171
{ USB_VENDOR_AND_INTERFACE_INFO (0x0930 , 0xff , 0x01 , 0x01 ),
171
172
.driver_info = BTUSB_BCM_PATCHRAM },
172
173
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
+
173
178
/* Intel Bluetooth USB Bootloader (RAM module) */
174
179
{ USB_DEVICE (0x8087 , 0x0a5a ),
175
180
.driver_info = BTUSB_INTEL_BOOT | BTUSB_BROKEN_ISOC },
@@ -2899,6 +2904,19 @@ static int btusb_probe(struct usb_interface *intf,
2899
2904
if (id -> driver_info == BTUSB_IGNORE )
2900
2905
return - ENODEV ;
2901
2906
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
+
2902
2920
if (id -> driver_info & BTUSB_ATH3012 ) {
2903
2921
struct usb_device * udev = interface_to_usbdev (intf );
2904
2922
0 commit comments