aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/bluetooth/btusb.c
diff options
context:
space:
mode:
authorSteven.Li <Steven.Li@Atheros.com>2011-07-01 02:02:36 -0400
committerGustavo F. Padovan <padovan@profusion.mobi>2011-07-01 13:48:02 -0400
commit2d25f8b462f3b849d8913d02978657ef06e67dd8 (patch)
tree5be565cc703be416a342ec404f57010f57db422c /drivers/bluetooth/btusb.c
parente1447d8d8da5ceea60dca027e78274e6ea9b660e (diff)
Bluetooth: Add Atheros AR3012 one PID/VID supported
The new Ath3k needs to download patch and radio table, and it keeps same PID/VID even after downloading the patch and radio table. This patch is to use the bcdDevice (Device Release Number) to judge whether the chip has been patched or not. The init bcdDevice value of the chip is 0x0001, this value increases after patch and radio table downloading. Signed-off-by: Steven.Li <yongli@qca.qualcomm.com> Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
Diffstat (limited to 'drivers/bluetooth/btusb.c')
-rw-r--r--drivers/bluetooth/btusb.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index c2de8951e3fb..91d13a9e8c65 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -54,6 +54,7 @@ static struct usb_driver btusb_driver;
54#define BTUSB_BCM92035 0x10 54#define BTUSB_BCM92035 0x10
55#define BTUSB_BROKEN_ISOC 0x20 55#define BTUSB_BROKEN_ISOC 0x20
56#define BTUSB_WRONG_SCO_MTU 0x40 56#define BTUSB_WRONG_SCO_MTU 0x40
57#define BTUSB_ATH3012 0x80
57 58
58static struct usb_device_id btusb_table[] = { 59static struct usb_device_id btusb_table[] = {
59 /* Generic Bluetooth USB device */ 60 /* Generic Bluetooth USB device */
@@ -110,7 +111,7 @@ static struct usb_device_id blacklist_table[] = {
110 { USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE }, 111 { USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE },
111 112
112 /* Atheros 3012 with sflash firmware */ 113 /* Atheros 3012 with sflash firmware */
113 { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_IGNORE }, 114 { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 },
114 115
115 /* Atheros AR5BBU12 with sflash firmware */ 116 /* Atheros AR5BBU12 with sflash firmware */
116 { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE }, 117 { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
@@ -914,6 +915,15 @@ static int btusb_probe(struct usb_interface *intf,
914 if (ignore_sniffer && id->driver_info & BTUSB_SNIFFER) 915 if (ignore_sniffer && id->driver_info & BTUSB_SNIFFER)
915 return -ENODEV; 916 return -ENODEV;
916 917
918 if (id->driver_info & BTUSB_ATH3012) {
919 struct usb_device *udev = interface_to_usbdev(intf);
920
921 /* Old firmware would otherwise let ath3k driver load
922 * patch and sysconfig files */
923 if (le16_to_cpu(udev->descriptor.bcdDevice) <= 0x0001)
924 return -ENODEV;
925 }
926
917 data = kzalloc(sizeof(*data), GFP_KERNEL); 927 data = kzalloc(sizeof(*data), GFP_KERNEL);
918 if (!data) 928 if (!data)
919 return -ENOMEM; 929 return -ENOMEM;