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