Bluetooth: Add support for Intel bootloader devices
[pandora-kernel.git] / drivers / bluetooth / btusb.c
index 825f3e1..21f10ca 100644 (file)
@@ -49,7 +49,8 @@ static struct usb_driver btusb_driver;
 #define BTUSB_WRONG_SCO_MTU    0x40
 #define BTUSB_ATH3012          0x80
 #define BTUSB_INTEL            0x100
-#define BTUSB_BCM_PATCHRAM     0x200
+#define BTUSB_INTEL_BOOT       0x200
+#define BTUSB_BCM_PATCHRAM     0x400
 
 static const struct usb_device_id btusb_table[] = {
        /* Generic Bluetooth USB device */
@@ -121,6 +122,9 @@ static const struct usb_device_id btusb_table[] = {
        /* IMC Networks - Broadcom based */
        { USB_VENDOR_AND_INTERFACE_INFO(0x13d3, 0xff, 0x01, 0x01) },
 
+       /* Intel Bluetooth USB Bootloader (RAM module) */
+       { USB_DEVICE(0x8087, 0x0a5a), .driver_info = BTUSB_INTEL_BOOT },
+
        { }     /* Terminating entry */
 };
 
@@ -1624,9 +1628,11 @@ reset_fw:
        /* The address 00:20:70:02:A0:00 indicates a BCM20702A0 controller
         * with no configured address.
         */
-       if (!bacmp(&bda->bdaddr, BDADDR_BCM20702A0))
+       if (!bacmp(&bda->bdaddr, BDADDR_BCM20702A0)) {
                BT_INFO("%s: BCM: using default device address (%pMR)",
                        hdev->name, &bda->bdaddr);
+               set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks);
+       }
 
        kfree_skb(skb);
 
@@ -1768,6 +1774,9 @@ static int btusb_probe(struct usb_interface *intf,
                hdev->set_bdaddr = btusb_set_bdaddr_intel;
        }
 
+       if (id->driver_info & BTUSB_INTEL_BOOT)
+               set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
+
        /* Interface numbers are hardcoded in the specification */
        data->isoc = usb_ifnum_to_if(data->udev, 1);