ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.bz2
[linux-2.6.git] / drivers / bluetooth / bfusb.c
1 /*
2  *
3  *  AVM BlueFRITZ! USB driver
4  *
5  *  Copyright (C) 2003  Marcel Holtmann <marcel@holtmann.org>
6  *
7  *
8  *  This program is free software; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation; either version 2 of the License, or
11  *  (at your option) any later version.
12  *
13  *  This program is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *  GNU General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License
19  *  along with this program; if not, write to the Free Software
20  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  *
22  */
23
24 #include <linux/config.h>
25 #include <linux/module.h>
26
27 #include <linux/kernel.h>
28 #include <linux/init.h>
29 #include <linux/slab.h>
30 #include <linux/types.h>
31 #include <linux/sched.h>
32 #include <linux/errno.h>
33 #include <linux/skbuff.h>
34
35 #include <linux/device.h>
36 #include <linux/firmware.h>
37
38 #include <linux/usb.h>
39
40 #include <net/bluetooth/bluetooth.h>
41 #include <net/bluetooth/hci_core.h>
42
43 #ifndef CONFIG_BT_HCIBFUSB_DEBUG
44 #undef  BT_DBG
45 #define BT_DBG(D...)
46 #endif
47
48 #define VERSION "1.1"
49
50 static struct usb_driver bfusb_driver;
51
52 static struct usb_device_id bfusb_table[] = {
53         /* AVM BlueFRITZ! USB */
54         { USB_DEVICE(0x057c, 0x2200) },
55
56         { }     /* Terminating entry */
57 };
58
59 MODULE_DEVICE_TABLE(usb, bfusb_table);
60
61
62 #define BFUSB_MAX_BLOCK_SIZE    256
63
64 #define BFUSB_BLOCK_TIMEOUT     (HZ * 3)
65
66 #define BFUSB_TX_PROCESS        1
67 #define BFUSB_TX_WAKEUP         2
68
69 #define BFUSB_MAX_BULK_TX       2
70 #define BFUSB_MAX_BULK_RX       2
71
72 struct bfusb {
73         struct hci_dev          *hdev;
74
75         unsigned long           state;
76
77         struct usb_device       *udev;
78
79         unsigned int            bulk_in_ep;
80         unsigned int            bulk_out_ep;
81         unsigned int            bulk_pkt_size;
82
83         rwlock_t                lock;
84
85         struct sk_buff_head     transmit_q;
86
87         struct sk_buff          *reassembly;
88
89         atomic_t                pending_tx;
90         struct sk_buff_head     pending_q;
91         struct sk_buff_head     completed_q;
92 };
93
94 struct bfusb_scb {
95         struct urb *urb;
96 };
97
98 static void bfusb_tx_complete(struct urb *urb, struct pt_regs *regs);
99 static void bfusb_rx_complete(struct urb *urb, struct pt_regs *regs);
100
101 static inline void bfusb_wait_for_urb(struct urb *urb)
102 {
103         while (atomic_read(&urb->count) > 1) {
104                 current->state = TASK_UNINTERRUPTIBLE;
105                 schedule_timeout((5 * HZ + 999) / 1000);
106         }
107 }
108
109 static struct urb *bfusb_get_completed(struct bfusb *bfusb)
110 {
111         struct sk_buff *skb;
112         struct urb *urb = NULL;
113
114         BT_DBG("bfusb %p", bfusb);
115
116         skb = skb_dequeue(&bfusb->completed_q);
117         if (skb) {
118                 urb = ((struct bfusb_scb *) skb->cb)->urb;
119                 kfree_skb(skb);
120         }
121
122         return urb;
123 }
124
125 static void bfusb_unlink_urbs(struct bfusb *bfusb)
126 {
127         struct sk_buff *skb;
128         struct urb *urb;
129
130         BT_DBG("bfusb %p", bfusb);
131
132         while ((skb = skb_dequeue(&bfusb->pending_q))) {
133                 urb = ((struct bfusb_scb *) skb->cb)->urb;
134                 usb_unlink_urb(urb);
135                 bfusb_wait_for_urb(urb);
136                 skb_queue_tail(&bfusb->completed_q, skb);
137         }
138
139         while ((urb = bfusb_get_completed(bfusb)))
140                 usb_free_urb(urb);
141 }
142
143
144 static int bfusb_send_bulk(struct bfusb *bfusb, struct sk_buff *skb)
145 {
146         struct bfusb_scb *scb = (void *) skb->cb;
147         struct urb *urb = bfusb_get_completed(bfusb);
148         int err, pipe;
149
150         BT_DBG("bfusb %p skb %p len %d", bfusb, skb, skb->len);
151
152         if (!urb && !(urb = usb_alloc_urb(0, GFP_ATOMIC)))
153                 return -ENOMEM;
154
155         pipe = usb_sndbulkpipe(bfusb->udev, bfusb->bulk_out_ep);
156
157         usb_fill_bulk_urb(urb, bfusb->udev, pipe, skb->data, skb->len,
158                         bfusb_tx_complete, skb);
159
160         scb->urb = urb;
161
162         skb_queue_tail(&bfusb->pending_q, skb);
163
164         err = usb_submit_urb(urb, GFP_ATOMIC);
165         if (err) {
166                 BT_ERR("%s bulk tx submit failed urb %p err %d", 
167                                         bfusb->hdev->name, urb, err);
168                 skb_unlink(skb);
169                 usb_free_urb(urb);
170         } else
171                 atomic_inc(&bfusb->pending_tx);
172
173         return err;
174 }
175
176 static void bfusb_tx_wakeup(struct bfusb *bfusb)
177 {
178         struct sk_buff *skb;
179
180         BT_DBG("bfusb %p", bfusb);
181
182         if (test_and_set_bit(BFUSB_TX_PROCESS, &bfusb->state)) {
183                 set_bit(BFUSB_TX_WAKEUP, &bfusb->state);
184                 return;
185         }
186
187         do {
188                 clear_bit(BFUSB_TX_WAKEUP, &bfusb->state);
189
190                 while ((atomic_read(&bfusb->pending_tx) < BFUSB_MAX_BULK_TX) &&
191                                 (skb = skb_dequeue(&bfusb->transmit_q))) {
192                         if (bfusb_send_bulk(bfusb, skb) < 0) {
193                                 skb_queue_head(&bfusb->transmit_q, skb);
194                                 break;
195                         }
196                 }
197
198         } while (test_bit(BFUSB_TX_WAKEUP, &bfusb->state));
199
200         clear_bit(BFUSB_TX_PROCESS, &bfusb->state);
201 }
202
203 static void bfusb_tx_complete(struct urb *urb, struct pt_regs *regs)
204 {
205         struct sk_buff *skb = (struct sk_buff *) urb->context;
206         struct bfusb *bfusb = (struct bfusb *) skb->dev;
207
208         BT_DBG("bfusb %p urb %p skb %p len %d", bfusb, urb, skb, skb->len);
209
210         atomic_dec(&bfusb->pending_tx);
211
212         if (!test_bit(HCI_RUNNING, &bfusb->hdev->flags))
213                 return;
214
215         if (!urb->status)
216                 bfusb->hdev->stat.byte_tx += skb->len;
217         else
218                 bfusb->hdev->stat.err_tx++;
219
220         read_lock(&bfusb->lock);
221
222         skb_unlink(skb);
223         skb_queue_tail(&bfusb->completed_q, skb);
224
225         bfusb_tx_wakeup(bfusb);
226
227         read_unlock(&bfusb->lock);
228 }
229
230
231 static int bfusb_rx_submit(struct bfusb *bfusb, struct urb *urb)
232 {
233         struct bfusb_scb *scb;
234         struct sk_buff *skb;
235         int err, pipe, size = HCI_MAX_FRAME_SIZE + 32;
236
237         BT_DBG("bfusb %p urb %p", bfusb, urb);
238
239         if (!urb && !(urb = usb_alloc_urb(0, GFP_ATOMIC)))
240                 return -ENOMEM;
241
242         if (!(skb = bt_skb_alloc(size, GFP_ATOMIC))) {
243                 usb_free_urb(urb);
244                 return -ENOMEM;
245         }
246
247         skb->dev = (void *) bfusb;
248
249         scb = (struct bfusb_scb *) skb->cb;
250         scb->urb = urb;
251
252         pipe = usb_rcvbulkpipe(bfusb->udev, bfusb->bulk_in_ep);
253
254         usb_fill_bulk_urb(urb, bfusb->udev, pipe, skb->data, size,
255                         bfusb_rx_complete, skb);
256
257         skb_queue_tail(&bfusb->pending_q, skb);
258
259         err = usb_submit_urb(urb, GFP_ATOMIC);
260         if (err) {
261                 BT_ERR("%s bulk rx submit failed urb %p err %d",
262                                         bfusb->hdev->name, urb, err);
263                 skb_unlink(skb);
264                 kfree_skb(skb);
265                 usb_free_urb(urb);
266         }
267
268         return err;
269 }
270
271 static inline int bfusb_recv_block(struct bfusb *bfusb, int hdr, unsigned char *data, int len)
272 {
273         BT_DBG("bfusb %p hdr 0x%02x data %p len %d", bfusb, hdr, data, len);
274
275         if (hdr & 0x10) {
276                 BT_ERR("%s error in block", bfusb->hdev->name);
277                 if (bfusb->reassembly)
278                         kfree_skb(bfusb->reassembly);
279                 bfusb->reassembly = NULL;
280                 return -EIO;
281         }
282
283         if (hdr & 0x04) {
284                 struct sk_buff *skb;
285                 unsigned char pkt_type;
286                 int pkt_len = 0;
287
288                 if (bfusb->reassembly) {
289                         BT_ERR("%s unexpected start block", bfusb->hdev->name);
290                         kfree_skb(bfusb->reassembly);
291                         bfusb->reassembly = NULL;
292                 }
293
294                 if (len < 1) {
295                         BT_ERR("%s no packet type found", bfusb->hdev->name);
296                         return -EPROTO;
297                 }
298
299                 pkt_type = *data++; len--;
300
301                 switch (pkt_type) {
302                 case HCI_EVENT_PKT:
303                         if (len >= HCI_EVENT_HDR_SIZE) {
304                                 struct hci_event_hdr *hdr = (struct hci_event_hdr *) data;
305                                 pkt_len = HCI_EVENT_HDR_SIZE + hdr->plen;
306                         } else {
307                                 BT_ERR("%s event block is too short", bfusb->hdev->name);
308                                 return -EILSEQ;
309                         }
310                         break;
311
312                 case HCI_ACLDATA_PKT:
313                         if (len >= HCI_ACL_HDR_SIZE) {
314                                 struct hci_acl_hdr *hdr = (struct hci_acl_hdr *) data;
315                                 pkt_len = HCI_ACL_HDR_SIZE + __le16_to_cpu(hdr->dlen);
316                         } else {
317                                 BT_ERR("%s data block is too short", bfusb->hdev->name);
318                                 return -EILSEQ;
319                         }
320                         break;
321
322                 case HCI_SCODATA_PKT:
323                         if (len >= HCI_SCO_HDR_SIZE) {
324                                 struct hci_sco_hdr *hdr = (struct hci_sco_hdr *) data;
325                                 pkt_len = HCI_SCO_HDR_SIZE + hdr->dlen;
326                         } else {
327                                 BT_ERR("%s audio block is too short", bfusb->hdev->name);
328                                 return -EILSEQ;
329                         }
330                         break;
331                 }
332
333                 skb = bt_skb_alloc(pkt_len, GFP_ATOMIC);
334                 if (!skb) {
335                         BT_ERR("%s no memory for the packet", bfusb->hdev->name);
336                         return -ENOMEM;
337                 }
338
339                 skb->dev = (void *) bfusb->hdev;
340                 skb->pkt_type = pkt_type;
341
342                 bfusb->reassembly = skb;
343         } else {
344                 if (!bfusb->reassembly) {
345                         BT_ERR("%s unexpected continuation block", bfusb->hdev->name);
346                         return -EIO;
347                 }
348         }
349
350         if (len > 0)
351                 memcpy(skb_put(bfusb->reassembly, len), data, len);
352
353         if (hdr & 0x08) {
354                 hci_recv_frame(bfusb->reassembly);
355                 bfusb->reassembly = NULL;
356         }
357
358         return 0;
359 }
360
361 static void bfusb_rx_complete(struct urb *urb, struct pt_regs *regs)
362 {
363         struct sk_buff *skb = (struct sk_buff *) urb->context;
364         struct bfusb *bfusb = (struct bfusb *) skb->dev;
365         unsigned char *buf = urb->transfer_buffer;
366         int count = urb->actual_length;
367         int err, hdr, len;
368
369         BT_DBG("bfusb %p urb %p skb %p len %d", bfusb, urb, skb, skb->len);
370
371         read_lock(&bfusb->lock);
372
373         if (!test_bit(HCI_RUNNING, &bfusb->hdev->flags))
374                 goto unlock;
375
376         if (urb->status || !count)
377                 goto resubmit;
378
379         bfusb->hdev->stat.byte_rx += count;
380
381         skb_put(skb, count);
382
383         while (count) {
384                 hdr = buf[0] | (buf[1] << 8);
385
386                 if (hdr & 0x4000) {
387                         len = 0;
388                         count -= 2;
389                         buf   += 2;
390                 } else {
391                         len = (buf[2] == 0) ? 256 : buf[2];
392                         count -= 3;
393                         buf   += 3;
394                 }
395
396                 if (count < len) {
397                         BT_ERR("%s block extends over URB buffer ranges",
398                                         bfusb->hdev->name);
399                 }
400
401                 if ((hdr & 0xe1) == 0xc1)
402                         bfusb_recv_block(bfusb, hdr, buf, len);
403
404                 count -= len;
405                 buf   += len;
406         }
407
408         skb_unlink(skb);
409         kfree_skb(skb);
410
411         bfusb_rx_submit(bfusb, urb);
412
413         read_unlock(&bfusb->lock);
414
415         return;
416
417 resubmit:
418         urb->dev = bfusb->udev;
419
420         err = usb_submit_urb(urb, GFP_ATOMIC);
421         if (err) {
422                 BT_ERR("%s bulk resubmit failed urb %p err %d",
423                                         bfusb->hdev->name, urb, err);
424         }
425
426 unlock:
427         read_unlock(&bfusb->lock);
428 }
429
430
431 static int bfusb_open(struct hci_dev *hdev)
432 {
433         struct bfusb *bfusb = (struct bfusb *) hdev->driver_data;
434         unsigned long flags;
435         int i, err;
436
437         BT_DBG("hdev %p bfusb %p", hdev, bfusb);
438
439         if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
440                 return 0;
441
442         write_lock_irqsave(&bfusb->lock, flags);
443
444         err = bfusb_rx_submit(bfusb, NULL);
445         if (!err) {
446                 for (i = 1; i < BFUSB_MAX_BULK_RX; i++)
447                         bfusb_rx_submit(bfusb, NULL);
448         } else {
449                 clear_bit(HCI_RUNNING, &hdev->flags);
450         }
451
452         write_unlock_irqrestore(&bfusb->lock, flags);
453
454         return err;
455 }
456
457 static int bfusb_flush(struct hci_dev *hdev)
458 {
459         struct bfusb *bfusb = (struct bfusb *) hdev->driver_data;
460
461         BT_DBG("hdev %p bfusb %p", hdev, bfusb);
462
463         skb_queue_purge(&bfusb->transmit_q);
464
465         return 0;
466 }
467
468 static int bfusb_close(struct hci_dev *hdev)
469 {
470         struct bfusb *bfusb = (struct bfusb *) hdev->driver_data;
471         unsigned long flags;
472
473         BT_DBG("hdev %p bfusb %p", hdev, bfusb);
474
475         if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
476                 return 0;
477
478         write_lock_irqsave(&bfusb->lock, flags);
479         write_unlock_irqrestore(&bfusb->lock, flags);
480
481         bfusb_unlink_urbs(bfusb);
482         bfusb_flush(hdev);
483
484         return 0;
485 }
486
487 static int bfusb_send_frame(struct sk_buff *skb)
488 {
489         struct hci_dev *hdev = (struct hci_dev *) skb->dev;
490         struct bfusb *bfusb;
491         struct sk_buff *nskb;
492         unsigned char buf[3];
493         int sent = 0, size, count;
494
495         BT_DBG("hdev %p skb %p type %d len %d", hdev, skb, skb->pkt_type, skb->len);
496
497         if (!hdev) {
498                 BT_ERR("Frame for unknown HCI device (hdev=NULL)");
499                 return -ENODEV;
500         }
501
502         if (!test_bit(HCI_RUNNING, &hdev->flags))
503                 return -EBUSY;
504
505         bfusb = (struct bfusb *) hdev->driver_data;
506
507         switch (skb->pkt_type) {
508         case HCI_COMMAND_PKT:
509                 hdev->stat.cmd_tx++;
510                 break;
511         case HCI_ACLDATA_PKT:
512                 hdev->stat.acl_tx++;
513                 break;
514         case HCI_SCODATA_PKT:
515                 hdev->stat.sco_tx++;
516                 break;
517         };
518
519         /* Prepend skb with frame type */
520         memcpy(skb_push(skb, 1), &(skb->pkt_type), 1);
521
522         count = skb->len;
523
524         /* Max HCI frame size seems to be 1511 + 1 */
525         if (!(nskb = bt_skb_alloc(count + 32, GFP_ATOMIC))) {
526                 BT_ERR("Can't allocate memory for new packet");
527                 return -ENOMEM;
528         }
529
530         nskb->dev = (void *) bfusb;
531
532         while (count) {
533                 size = min_t(uint, count, BFUSB_MAX_BLOCK_SIZE);
534
535                 buf[0] = 0xc1 | ((sent == 0) ? 0x04 : 0) | ((count == size) ? 0x08 : 0);
536                 buf[1] = 0x00;
537                 buf[2] = (size == BFUSB_MAX_BLOCK_SIZE) ? 0 : size;
538
539                 memcpy(skb_put(nskb, 3), buf, 3);
540                 memcpy(skb_put(nskb, size), skb->data + sent, size);
541
542                 sent  += size;
543                 count -= size;
544         }
545
546         /* Don't send frame with multiple size of bulk max packet */
547         if ((nskb->len % bfusb->bulk_pkt_size) == 0) {
548                 buf[0] = 0xdd;
549                 buf[1] = 0x00;
550                 memcpy(skb_put(nskb, 2), buf, 2);
551         }
552
553         read_lock(&bfusb->lock);
554
555         skb_queue_tail(&bfusb->transmit_q, nskb);
556         bfusb_tx_wakeup(bfusb);
557
558         read_unlock(&bfusb->lock);
559
560         kfree_skb(skb);
561
562         return 0;
563 }
564
565 static void bfusb_destruct(struct hci_dev *hdev)
566 {
567         struct bfusb *bfusb = (struct bfusb *) hdev->driver_data;
568
569         BT_DBG("hdev %p bfusb %p", hdev, bfusb);
570
571         kfree(bfusb);
572 }
573
574 static int bfusb_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg)
575 {
576         return -ENOIOCTLCMD;
577 }
578
579
580 static int bfusb_load_firmware(struct bfusb *bfusb, unsigned char *firmware, int count)
581 {
582         unsigned char *buf;
583         int err, pipe, len, size, sent = 0;
584
585         BT_DBG("bfusb %p udev %p", bfusb, bfusb->udev);
586
587         BT_INFO("BlueFRITZ! USB loading firmware");
588
589         pipe = usb_sndctrlpipe(bfusb->udev, 0);
590
591         if (usb_control_msg(bfusb->udev, pipe, USB_REQ_SET_CONFIGURATION,
592                                 0, 1, 0, NULL, 0, HZ * USB_CTRL_SET_TIMEOUT) < 0) {
593                 BT_ERR("Can't change to loading configuration");
594                 return -EBUSY;
595         }
596
597         buf = kmalloc(BFUSB_MAX_BLOCK_SIZE + 3, GFP_ATOMIC);
598         if (!buf) {
599                 BT_ERR("Can't allocate memory chunk for firmware");
600                 return -ENOMEM;
601         }
602
603         pipe = usb_sndbulkpipe(bfusb->udev, bfusb->bulk_out_ep);
604
605         while (count) {
606                 size = min_t(uint, count, BFUSB_MAX_BLOCK_SIZE + 3);
607
608                 memcpy(buf, firmware + sent, size);
609
610                 err = usb_bulk_msg(bfusb->udev, pipe, buf, size,
611                                         &len, BFUSB_BLOCK_TIMEOUT);
612
613                 if (err || (len != size)) {
614                         BT_ERR("Error in firmware loading");
615                         goto error;
616                 }
617
618                 sent  += size;
619                 count -= size;
620         }
621
622         if ((err = usb_bulk_msg(bfusb->udev, pipe, NULL, 0,
623                                 &len, BFUSB_BLOCK_TIMEOUT)) < 0) {
624                 BT_ERR("Error in null packet request");
625                 goto error;
626         }
627
628         pipe = usb_sndctrlpipe(bfusb->udev, 0);
629
630         if ((err = usb_control_msg(bfusb->udev, pipe, USB_REQ_SET_CONFIGURATION,
631                                 0, 2, 0, NULL, 0, HZ * USB_CTRL_SET_TIMEOUT)) < 0) {
632                 BT_ERR("Can't change to running configuration");
633                 goto error;
634         }
635
636         BT_INFO("BlueFRITZ! USB device ready");
637
638         kfree(buf);
639         return 0;
640
641 error:
642         kfree(buf);
643
644         pipe = usb_sndctrlpipe(bfusb->udev, 0);
645
646         usb_control_msg(bfusb->udev, pipe, USB_REQ_SET_CONFIGURATION,
647                                 0, 0, 0, NULL, 0, HZ * USB_CTRL_SET_TIMEOUT);
648
649         return err;
650 }
651
652 static int bfusb_probe(struct usb_interface *intf, const struct usb_device_id *id)
653 {
654         const struct firmware *firmware;
655         struct usb_device *udev = interface_to_usbdev(intf);
656         struct usb_host_endpoint *bulk_out_ep;
657         struct usb_host_endpoint *bulk_in_ep;
658         struct hci_dev *hdev;
659         struct bfusb *bfusb;
660
661         BT_DBG("intf %p id %p", intf, id);
662
663         /* Check number of endpoints */
664         if (intf->altsetting[0].desc.bNumEndpoints < 2)
665                 return -EIO;
666
667         bulk_out_ep = &intf->altsetting[0].endpoint[0];
668         bulk_in_ep  = &intf->altsetting[0].endpoint[1];
669
670         if (!bulk_out_ep || !bulk_in_ep) {
671                 BT_ERR("Bulk endpoints not found");
672                 goto done;
673         }
674
675         /* Initialize control structure and load firmware */
676         if (!(bfusb = kmalloc(sizeof(struct bfusb), GFP_KERNEL))) {
677                 BT_ERR("Can't allocate memory for control structure");
678                 goto done;
679         }
680
681         memset(bfusb, 0, sizeof(struct bfusb));
682
683         bfusb->udev = udev;
684         bfusb->bulk_in_ep    = bulk_in_ep->desc.bEndpointAddress;
685         bfusb->bulk_out_ep   = bulk_out_ep->desc.bEndpointAddress;
686         bfusb->bulk_pkt_size = bulk_out_ep->desc.wMaxPacketSize;
687
688         bfusb->lock = RW_LOCK_UNLOCKED;
689
690         bfusb->reassembly = NULL;
691
692         skb_queue_head_init(&bfusb->transmit_q);
693         skb_queue_head_init(&bfusb->pending_q);
694         skb_queue_head_init(&bfusb->completed_q);
695
696         if (request_firmware(&firmware, "bfubase.frm", &udev->dev) < 0) {
697                 BT_ERR("Firmware request failed");
698                 goto error;
699         }
700
701         BT_DBG("firmware data %p size %d", firmware->data, firmware->size);
702
703         if (bfusb_load_firmware(bfusb, firmware->data, firmware->size) < 0) {
704                 BT_ERR("Firmware loading failed");
705                 goto release;
706         }
707
708         release_firmware(firmware);
709
710         /* Initialize and register HCI device */
711         hdev = hci_alloc_dev();
712         if (!hdev) {
713                 BT_ERR("Can't allocate HCI device");
714                 goto error;
715         }
716
717         bfusb->hdev = hdev;
718
719         hdev->type = HCI_USB;
720         hdev->driver_data = bfusb;
721         SET_HCIDEV_DEV(hdev, &intf->dev);
722
723         hdev->open     = bfusb_open;
724         hdev->close    = bfusb_close;
725         hdev->flush    = bfusb_flush;
726         hdev->send     = bfusb_send_frame;
727         hdev->destruct = bfusb_destruct;
728         hdev->ioctl    = bfusb_ioctl;
729
730         hdev->owner = THIS_MODULE;
731
732         if (hci_register_dev(hdev) < 0) {
733                 BT_ERR("Can't register HCI device");
734                 hci_free_dev(hdev);
735                 goto error;
736         }
737
738         usb_set_intfdata(intf, bfusb);
739
740         return 0;
741
742 release:
743         release_firmware(firmware);
744
745 error:
746         kfree(bfusb);
747
748 done:
749         return -EIO;
750 }
751
752 static void bfusb_disconnect(struct usb_interface *intf)
753 {
754         struct bfusb *bfusb = usb_get_intfdata(intf);
755         struct hci_dev *hdev = bfusb->hdev;
756
757         BT_DBG("intf %p", intf);
758
759         if (!hdev)
760                 return;
761
762         usb_set_intfdata(intf, NULL);
763
764         bfusb_close(hdev);
765
766         if (hci_unregister_dev(hdev) < 0)
767                 BT_ERR("Can't unregister HCI device %s", hdev->name);
768
769         hci_free_dev(hdev);
770 }
771
772 static struct usb_driver bfusb_driver = {
773         .owner          = THIS_MODULE,
774         .name           = "bfusb",
775         .probe          = bfusb_probe,
776         .disconnect     = bfusb_disconnect,
777         .id_table       = bfusb_table,
778 };
779
780 static int __init bfusb_init(void)
781 {
782         int err;
783
784         BT_INFO("BlueFRITZ! USB driver ver %s", VERSION);
785
786         if ((err = usb_register(&bfusb_driver)) < 0)
787                 BT_ERR("Failed to register BlueFRITZ! USB driver");
788
789         return err;
790 }
791
792 static void __exit bfusb_exit(void)
793 {
794         usb_deregister(&bfusb_driver);
795 }
796
797 module_init(bfusb_init);
798 module_exit(bfusb_exit);
799
800 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
801 MODULE_DESCRIPTION("BlueFRITZ! USB driver ver " VERSION);
802 MODULE_VERSION(VERSION);
803 MODULE_LICENSE("GPL");