patch-2_6_7-vs1_9_1_12
[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         buf = kmalloc(BFUSB_MAX_BLOCK_SIZE + 3, GFP_ATOMIC);
589         if (!buf) {
590                 BT_ERR("Can't allocate memory chunk for firmware");
591                 return -ENOMEM;
592         }
593
594         pipe = usb_sndbulkpipe(bfusb->udev, bfusb->bulk_out_ep);
595
596         while (count) {
597                 size = min_t(uint, count, BFUSB_MAX_BLOCK_SIZE + 3);
598
599                 memcpy(buf, firmware + sent, size);
600
601                 err = usb_bulk_msg(bfusb->udev, pipe, buf, size,
602                                         &len, BFUSB_BLOCK_TIMEOUT);
603
604                 if (err || (len != size)) {
605                         BT_ERR("Error in firmware loading");
606                         goto error;
607                 }
608
609                 sent  += size;
610                 count -= size;
611         }
612
613         if ((err = usb_bulk_msg(bfusb->udev, pipe, NULL, 0,
614                                 &len, BFUSB_BLOCK_TIMEOUT)) < 0) {
615                 BT_ERR("Error in null packet request");
616                 goto error;
617         }
618
619         pipe = usb_sndctrlpipe(bfusb->udev, 0);
620
621         if ((err = usb_control_msg(bfusb->udev, pipe, USB_REQ_SET_CONFIGURATION,
622                                 0, 2, 0, NULL, 0, HZ * USB_CTRL_SET_TIMEOUT)) < 0) {
623                 BT_ERR("Can't change to running configuration");
624                 goto error;
625         }
626
627         BT_INFO("BlueFRITZ! USB device ready");
628
629         kfree(buf);
630         return 0;
631
632 error:
633         kfree(buf);
634
635         pipe = usb_sndctrlpipe(bfusb->udev, 0);
636
637         usb_control_msg(bfusb->udev, pipe, USB_REQ_SET_CONFIGURATION,
638                                 0, 0, 0, NULL, 0, HZ * USB_CTRL_SET_TIMEOUT);
639
640         return err;
641 }
642
643 static int bfusb_probe(struct usb_interface *intf, const struct usb_device_id *id)
644 {
645         const struct firmware *firmware;
646         struct usb_device *udev = interface_to_usbdev(intf);
647         struct usb_host_endpoint *bulk_out_ep;
648         struct usb_host_endpoint *bulk_in_ep;
649         struct hci_dev *hdev;
650         struct bfusb *bfusb;
651
652         BT_DBG("intf %p id %p", intf, id);
653
654         /* Check number of endpoints */
655         if (intf->cur_altsetting->desc.bNumEndpoints < 2)
656                 return -EIO;
657
658         bulk_out_ep = &intf->cur_altsetting->endpoint[0];
659         bulk_in_ep  = &intf->cur_altsetting->endpoint[1];
660
661         if (!bulk_out_ep || !bulk_in_ep) {
662                 BT_ERR("Bulk endpoints not found");
663                 goto done;
664         }
665
666         /* Initialize control structure and load firmware */
667         if (!(bfusb = kmalloc(sizeof(struct bfusb), GFP_KERNEL))) {
668                 BT_ERR("Can't allocate memory for control structure");
669                 goto done;
670         }
671
672         memset(bfusb, 0, sizeof(struct bfusb));
673
674         bfusb->udev = udev;
675         bfusb->bulk_in_ep    = bulk_in_ep->desc.bEndpointAddress;
676         bfusb->bulk_out_ep   = bulk_out_ep->desc.bEndpointAddress;
677         bfusb->bulk_pkt_size = bulk_out_ep->desc.wMaxPacketSize;
678
679         bfusb->lock = RW_LOCK_UNLOCKED;
680
681         bfusb->reassembly = NULL;
682
683         skb_queue_head_init(&bfusb->transmit_q);
684         skb_queue_head_init(&bfusb->pending_q);
685         skb_queue_head_init(&bfusb->completed_q);
686
687         if (request_firmware(&firmware, "bfubase.frm", &udev->dev) < 0) {
688                 BT_ERR("Firmware request failed");
689                 goto error;
690         }
691
692         BT_DBG("firmware data %p size %d", firmware->data, firmware->size);
693
694         if (bfusb_load_firmware(bfusb, firmware->data, firmware->size) < 0) {
695                 BT_ERR("Firmware loading failed");
696                 goto release;
697         }
698
699         release_firmware(firmware);
700
701         /* Initialize and register HCI device */
702         hdev = hci_alloc_dev();
703         if (!hdev) {
704                 BT_ERR("Can't allocate HCI device");
705                 goto error;
706         }
707
708         bfusb->hdev = hdev;
709
710         hdev->type = HCI_USB;
711         hdev->driver_data = bfusb;
712         SET_HCIDEV_DEV(hdev, &intf->dev);
713
714         hdev->open     = bfusb_open;
715         hdev->close    = bfusb_close;
716         hdev->flush    = bfusb_flush;
717         hdev->send     = bfusb_send_frame;
718         hdev->destruct = bfusb_destruct;
719         hdev->ioctl    = bfusb_ioctl;
720
721         hdev->owner = THIS_MODULE;
722
723         if (hci_register_dev(hdev) < 0) {
724                 BT_ERR("Can't register HCI device");
725                 hci_free_dev(hdev);
726                 goto error;
727         }
728
729         usb_set_intfdata(intf, bfusb);
730
731         return 0;
732
733 release:
734         release_firmware(firmware);
735
736 error:
737         kfree(bfusb);
738
739 done:
740         return -EIO;
741 }
742
743 static void bfusb_disconnect(struct usb_interface *intf)
744 {
745         struct bfusb *bfusb = usb_get_intfdata(intf);
746         struct hci_dev *hdev = bfusb->hdev;
747
748         BT_DBG("intf %p", intf);
749
750         if (!hdev)
751                 return;
752
753         usb_set_intfdata(intf, NULL);
754
755         bfusb_close(hdev);
756
757         if (hci_unregister_dev(hdev) < 0)
758                 BT_ERR("Can't unregister HCI device %s", hdev->name);
759
760         hci_free_dev(hdev);
761 }
762
763 static struct usb_driver bfusb_driver = {
764         .owner          = THIS_MODULE,
765         .name           = "bfusb",
766         .probe          = bfusb_probe,
767         .disconnect     = bfusb_disconnect,
768         .id_table       = bfusb_table,
769 };
770
771 static int __init bfusb_init(void)
772 {
773         int err;
774
775         BT_INFO("BlueFRITZ! USB driver ver %s", VERSION);
776
777         if ((err = usb_register(&bfusb_driver)) < 0)
778                 BT_ERR("Failed to register BlueFRITZ! USB driver");
779
780         return err;
781 }
782
783 static void __exit bfusb_exit(void)
784 {
785         usb_deregister(&bfusb_driver);
786 }
787
788 module_init(bfusb_init);
789 module_exit(bfusb_exit);
790
791 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
792 MODULE_DESCRIPTION("BlueFRITZ! USB driver ver " VERSION);
793 MODULE_VERSION(VERSION);
794 MODULE_LICENSE("GPL");