GNU Linux-libre 4.14.266-gnu1
[releases.git] / drivers / bluetooth / bluecard_cs.c
1 /*
2  *
3  *  Bluetooth driver for the Anycom BlueCard (LSE039/LSE041)
4  *
5  *  Copyright (C) 2001-2002  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 version 2 as
10  *  published by the Free Software Foundation;
11  *
12  *  Software distributed under the License is distributed on an "AS
13  *  IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
14  *  implied. See the License for the specific language governing
15  *  rights and limitations under the License.
16  *
17  *  The initial developer of the original code is David A. Hinds
18  *  <dahinds@users.sourceforge.net>.  Portions created by David A. Hinds
19  *  are Copyright (C) 1999 David A. Hinds.  All Rights Reserved.
20  *
21  */
22
23 #include <linux/module.h>
24
25 #include <linux/kernel.h>
26 #include <linux/init.h>
27 #include <linux/slab.h>
28 #include <linux/types.h>
29 #include <linux/sched.h>
30 #include <linux/delay.h>
31 #include <linux/timer.h>
32 #include <linux/errno.h>
33 #include <linux/ptrace.h>
34 #include <linux/ioport.h>
35 #include <linux/spinlock.h>
36 #include <linux/moduleparam.h>
37 #include <linux/wait.h>
38
39 #include <linux/skbuff.h>
40 #include <linux/io.h>
41
42 #include <pcmcia/cistpl.h>
43 #include <pcmcia/ciscode.h>
44 #include <pcmcia/ds.h>
45 #include <pcmcia/cisreg.h>
46
47 #include <net/bluetooth/bluetooth.h>
48 #include <net/bluetooth/hci_core.h>
49
50
51
52 /* ======================== Module parameters ======================== */
53
54
55 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
56 MODULE_DESCRIPTION("Bluetooth driver for the Anycom BlueCard (LSE039/LSE041)");
57 MODULE_LICENSE("GPL");
58
59
60
61 /* ======================== Local structures ======================== */
62
63
64 struct bluecard_info {
65         struct pcmcia_device *p_dev;
66
67         struct hci_dev *hdev;
68
69         spinlock_t lock;                /* For serializing operations */
70         struct timer_list timer;        /* For LED control */
71
72         struct sk_buff_head txq;
73         unsigned long tx_state;
74
75         unsigned long rx_state;
76         unsigned long rx_count;
77         struct sk_buff *rx_skb;
78
79         unsigned char ctrl_reg;
80         unsigned long hw_state;         /* Status of the hardware and LED control */
81 };
82
83
84 static int bluecard_config(struct pcmcia_device *link);
85 static void bluecard_release(struct pcmcia_device *link);
86
87 static void bluecard_detach(struct pcmcia_device *p_dev);
88
89
90 /* Default baud rate: 57600, 115200, 230400 or 460800 */
91 #define DEFAULT_BAUD_RATE  230400
92
93
94 /* Hardware states */
95 #define CARD_READY             1
96 #define CARD_ACTIVITY          2
97 #define CARD_HAS_PCCARD_ID     4
98 #define CARD_HAS_POWER_LED     5
99 #define CARD_HAS_ACTIVITY_LED  6
100
101 /* Transmit states  */
102 #define XMIT_SENDING         1
103 #define XMIT_WAKEUP          2
104 #define XMIT_BUFFER_NUMBER   5  /* unset = buffer one, set = buffer two */
105 #define XMIT_BUF_ONE_READY   6
106 #define XMIT_BUF_TWO_READY   7
107 #define XMIT_SENDING_READY   8
108
109 /* Receiver states */
110 #define RECV_WAIT_PACKET_TYPE   0
111 #define RECV_WAIT_EVENT_HEADER  1
112 #define RECV_WAIT_ACL_HEADER    2
113 #define RECV_WAIT_SCO_HEADER    3
114 #define RECV_WAIT_DATA          4
115
116 /* Special packet types */
117 #define PKT_BAUD_RATE_57600   0x80
118 #define PKT_BAUD_RATE_115200  0x81
119 #define PKT_BAUD_RATE_230400  0x82
120 #define PKT_BAUD_RATE_460800  0x83
121
122
123 /* These are the register offsets */
124 #define REG_COMMAND     0x20
125 #define REG_INTERRUPT   0x21
126 #define REG_CONTROL     0x22
127 #define REG_RX_CONTROL  0x24
128 #define REG_CARD_RESET  0x30
129 #define REG_LED_CTRL    0x30
130
131 /* REG_COMMAND */
132 #define REG_COMMAND_TX_BUF_ONE  0x01
133 #define REG_COMMAND_TX_BUF_TWO  0x02
134 #define REG_COMMAND_RX_BUF_ONE  0x04
135 #define REG_COMMAND_RX_BUF_TWO  0x08
136 #define REG_COMMAND_RX_WIN_ONE  0x00
137 #define REG_COMMAND_RX_WIN_TWO  0x10
138
139 /* REG_CONTROL */
140 #define REG_CONTROL_BAUD_RATE_57600   0x00
141 #define REG_CONTROL_BAUD_RATE_115200  0x01
142 #define REG_CONTROL_BAUD_RATE_230400  0x02
143 #define REG_CONTROL_BAUD_RATE_460800  0x03
144 #define REG_CONTROL_RTS               0x04
145 #define REG_CONTROL_BT_ON             0x08
146 #define REG_CONTROL_BT_RESET          0x10
147 #define REG_CONTROL_BT_RES_PU         0x20
148 #define REG_CONTROL_INTERRUPT         0x40
149 #define REG_CONTROL_CARD_RESET        0x80
150
151 /* REG_RX_CONTROL */
152 #define RTS_LEVEL_SHIFT_BITS  0x02
153
154
155
156 /* ======================== LED handling routines ======================== */
157
158
159 static void bluecard_activity_led_timeout(u_long arg)
160 {
161         struct bluecard_info *info = (struct bluecard_info *)arg;
162         unsigned int iobase = info->p_dev->resource[0]->start;
163
164         if (test_bit(CARD_ACTIVITY, &(info->hw_state))) {
165                 /* leave LED in inactive state for HZ/10 for blink effect */
166                 clear_bit(CARD_ACTIVITY, &(info->hw_state));
167                 mod_timer(&(info->timer), jiffies + HZ / 10);
168         }
169
170         /* Disable activity LED, enable power LED */
171         outb(0x08 | 0x20, iobase + 0x30);
172 }
173
174
175 static void bluecard_enable_activity_led(struct bluecard_info *info)
176 {
177         unsigned int iobase = info->p_dev->resource[0]->start;
178
179         /* don't disturb running blink timer */
180         if (timer_pending(&(info->timer)))
181                 return;
182
183         set_bit(CARD_ACTIVITY, &(info->hw_state));
184
185         if (test_bit(CARD_HAS_ACTIVITY_LED, &(info->hw_state))) {
186                 /* Enable activity LED, keep power LED enabled */
187                 outb(0x18 | 0x60, iobase + 0x30);
188         } else {
189                 /* Disable power LED */
190                 outb(0x00, iobase + 0x30);
191         }
192
193         /* Stop the LED after HZ/10 */
194         mod_timer(&(info->timer), jiffies + HZ / 10);
195 }
196
197
198
199 /* ======================== Interrupt handling ======================== */
200
201
202 static int bluecard_write(unsigned int iobase, unsigned int offset, __u8 *buf, int len)
203 {
204         int i, actual;
205
206         actual = (len > 15) ? 15 : len;
207
208         outb_p(actual, iobase + offset);
209
210         for (i = 0; i < actual; i++)
211                 outb_p(buf[i], iobase + offset + i + 1);
212
213         return actual;
214 }
215
216
217 static void bluecard_write_wakeup(struct bluecard_info *info)
218 {
219         if (!info) {
220                 BT_ERR("Unknown device");
221                 return;
222         }
223
224         if (!test_bit(XMIT_SENDING_READY, &(info->tx_state)))
225                 return;
226
227         if (test_and_set_bit(XMIT_SENDING, &(info->tx_state))) {
228                 set_bit(XMIT_WAKEUP, &(info->tx_state));
229                 return;
230         }
231
232         do {
233                 unsigned int iobase = info->p_dev->resource[0]->start;
234                 unsigned int offset;
235                 unsigned char command;
236                 unsigned long ready_bit;
237                 register struct sk_buff *skb;
238                 int len;
239
240                 clear_bit(XMIT_WAKEUP, &(info->tx_state));
241
242                 if (!pcmcia_dev_present(info->p_dev))
243                         return;
244
245                 if (test_bit(XMIT_BUFFER_NUMBER, &(info->tx_state))) {
246                         if (!test_bit(XMIT_BUF_TWO_READY, &(info->tx_state)))
247                                 break;
248                         offset = 0x10;
249                         command = REG_COMMAND_TX_BUF_TWO;
250                         ready_bit = XMIT_BUF_TWO_READY;
251                 } else {
252                         if (!test_bit(XMIT_BUF_ONE_READY, &(info->tx_state)))
253                                 break;
254                         offset = 0x00;
255                         command = REG_COMMAND_TX_BUF_ONE;
256                         ready_bit = XMIT_BUF_ONE_READY;
257                 }
258
259                 skb = skb_dequeue(&(info->txq));
260                 if (!skb)
261                         break;
262
263                 if (hci_skb_pkt_type(skb) & 0x80) {
264                         /* Disable RTS */
265                         info->ctrl_reg |= REG_CONTROL_RTS;
266                         outb(info->ctrl_reg, iobase + REG_CONTROL);
267                 }
268
269                 /* Activate LED */
270                 bluecard_enable_activity_led(info);
271
272                 /* Send frame */
273                 len = bluecard_write(iobase, offset, skb->data, skb->len);
274
275                 /* Tell the FPGA to send the data */
276                 outb_p(command, iobase + REG_COMMAND);
277
278                 /* Mark the buffer as dirty */
279                 clear_bit(ready_bit, &(info->tx_state));
280
281                 if (hci_skb_pkt_type(skb) & 0x80) {
282                         DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
283                         DEFINE_WAIT(wait);
284
285                         unsigned char baud_reg;
286
287                         switch (hci_skb_pkt_type(skb)) {
288                         case PKT_BAUD_RATE_460800:
289                                 baud_reg = REG_CONTROL_BAUD_RATE_460800;
290                                 break;
291                         case PKT_BAUD_RATE_230400:
292                                 baud_reg = REG_CONTROL_BAUD_RATE_230400;
293                                 break;
294                         case PKT_BAUD_RATE_115200:
295                                 baud_reg = REG_CONTROL_BAUD_RATE_115200;
296                                 break;
297                         case PKT_BAUD_RATE_57600:
298                                 /* Fall through... */
299                         default:
300                                 baud_reg = REG_CONTROL_BAUD_RATE_57600;
301                                 break;
302                         }
303
304                         /* Wait until the command reaches the baseband */
305                         prepare_to_wait(&wq, &wait, TASK_INTERRUPTIBLE);
306                         schedule_timeout(HZ/10);
307                         finish_wait(&wq, &wait);
308
309                         /* Set baud on baseband */
310                         info->ctrl_reg &= ~0x03;
311                         info->ctrl_reg |= baud_reg;
312                         outb(info->ctrl_reg, iobase + REG_CONTROL);
313
314                         /* Enable RTS */
315                         info->ctrl_reg &= ~REG_CONTROL_RTS;
316                         outb(info->ctrl_reg, iobase + REG_CONTROL);
317
318                         /* Wait before the next HCI packet can be send */
319                         prepare_to_wait(&wq, &wait, TASK_INTERRUPTIBLE);
320                         schedule_timeout(HZ);
321                         finish_wait(&wq, &wait);
322                 }
323
324                 if (len == skb->len) {
325                         kfree_skb(skb);
326                 } else {
327                         skb_pull(skb, len);
328                         skb_queue_head(&(info->txq), skb);
329                 }
330
331                 info->hdev->stat.byte_tx += len;
332
333                 /* Change buffer */
334                 change_bit(XMIT_BUFFER_NUMBER, &(info->tx_state));
335
336         } while (test_bit(XMIT_WAKEUP, &(info->tx_state)));
337
338         clear_bit(XMIT_SENDING, &(info->tx_state));
339 }
340
341
342 static int bluecard_read(unsigned int iobase, unsigned int offset, __u8 *buf, int size)
343 {
344         int i, n, len;
345
346         outb(REG_COMMAND_RX_WIN_ONE, iobase + REG_COMMAND);
347
348         len = inb(iobase + offset);
349         n = 0;
350         i = 1;
351
352         while (n < len) {
353
354                 if (i == 16) {
355                         outb(REG_COMMAND_RX_WIN_TWO, iobase + REG_COMMAND);
356                         i = 0;
357                 }
358
359                 buf[n] = inb(iobase + offset + i);
360
361                 n++;
362                 i++;
363
364         }
365
366         return len;
367 }
368
369
370 static void bluecard_receive(struct bluecard_info *info,
371                              unsigned int offset)
372 {
373         unsigned int iobase;
374         unsigned char buf[31];
375         int i, len;
376
377         if (!info) {
378                 BT_ERR("Unknown device");
379                 return;
380         }
381
382         iobase = info->p_dev->resource[0]->start;
383
384         if (test_bit(XMIT_SENDING_READY, &(info->tx_state)))
385                 bluecard_enable_activity_led(info);
386
387         len = bluecard_read(iobase, offset, buf, sizeof(buf));
388
389         for (i = 0; i < len; i++) {
390
391                 /* Allocate packet */
392                 if (!info->rx_skb) {
393                         info->rx_state = RECV_WAIT_PACKET_TYPE;
394                         info->rx_count = 0;
395                         info->rx_skb = bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC);
396                         if (!info->rx_skb) {
397                                 BT_ERR("Can't allocate mem for new packet");
398                                 return;
399                         }
400                 }
401
402                 if (info->rx_state == RECV_WAIT_PACKET_TYPE) {
403
404                         hci_skb_pkt_type(info->rx_skb) = buf[i];
405
406                         switch (hci_skb_pkt_type(info->rx_skb)) {
407
408                         case 0x00:
409                                 /* init packet */
410                                 if (offset != 0x00) {
411                                         set_bit(XMIT_BUF_ONE_READY, &(info->tx_state));
412                                         set_bit(XMIT_BUF_TWO_READY, &(info->tx_state));
413                                         set_bit(XMIT_SENDING_READY, &(info->tx_state));
414                                         bluecard_write_wakeup(info);
415                                 }
416
417                                 kfree_skb(info->rx_skb);
418                                 info->rx_skb = NULL;
419                                 break;
420
421                         case HCI_EVENT_PKT:
422                                 info->rx_state = RECV_WAIT_EVENT_HEADER;
423                                 info->rx_count = HCI_EVENT_HDR_SIZE;
424                                 break;
425
426                         case HCI_ACLDATA_PKT:
427                                 info->rx_state = RECV_WAIT_ACL_HEADER;
428                                 info->rx_count = HCI_ACL_HDR_SIZE;
429                                 break;
430
431                         case HCI_SCODATA_PKT:
432                                 info->rx_state = RECV_WAIT_SCO_HEADER;
433                                 info->rx_count = HCI_SCO_HDR_SIZE;
434                                 break;
435
436                         default:
437                                 /* unknown packet */
438                                 BT_ERR("Unknown HCI packet with type 0x%02x received",
439                                        hci_skb_pkt_type(info->rx_skb));
440                                 info->hdev->stat.err_rx++;
441
442                                 kfree_skb(info->rx_skb);
443                                 info->rx_skb = NULL;
444                                 break;
445
446                         }
447
448                 } else {
449
450                         skb_put_u8(info->rx_skb, buf[i]);
451                         info->rx_count--;
452
453                         if (info->rx_count == 0) {
454
455                                 int dlen;
456                                 struct hci_event_hdr *eh;
457                                 struct hci_acl_hdr *ah;
458                                 struct hci_sco_hdr *sh;
459
460                                 switch (info->rx_state) {
461
462                                 case RECV_WAIT_EVENT_HEADER:
463                                         eh = hci_event_hdr(info->rx_skb);
464                                         info->rx_state = RECV_WAIT_DATA;
465                                         info->rx_count = eh->plen;
466                                         break;
467
468                                 case RECV_WAIT_ACL_HEADER:
469                                         ah = hci_acl_hdr(info->rx_skb);
470                                         dlen = __le16_to_cpu(ah->dlen);
471                                         info->rx_state = RECV_WAIT_DATA;
472                                         info->rx_count = dlen;
473                                         break;
474
475                                 case RECV_WAIT_SCO_HEADER:
476                                         sh = hci_sco_hdr(info->rx_skb);
477                                         info->rx_state = RECV_WAIT_DATA;
478                                         info->rx_count = sh->dlen;
479                                         break;
480
481                                 case RECV_WAIT_DATA:
482                                         hci_recv_frame(info->hdev, info->rx_skb);
483                                         info->rx_skb = NULL;
484                                         break;
485
486                                 }
487
488                         }
489
490                 }
491
492
493         }
494
495         info->hdev->stat.byte_rx += len;
496 }
497
498
499 static irqreturn_t bluecard_interrupt(int irq, void *dev_inst)
500 {
501         struct bluecard_info *info = dev_inst;
502         unsigned int iobase;
503         unsigned char reg;
504
505         if (!info || !info->hdev)
506                 /* our irq handler is shared */
507                 return IRQ_NONE;
508
509         if (!test_bit(CARD_READY, &(info->hw_state)))
510                 return IRQ_HANDLED;
511
512         iobase = info->p_dev->resource[0]->start;
513
514         spin_lock(&(info->lock));
515
516         /* Disable interrupt */
517         info->ctrl_reg &= ~REG_CONTROL_INTERRUPT;
518         outb(info->ctrl_reg, iobase + REG_CONTROL);
519
520         reg = inb(iobase + REG_INTERRUPT);
521
522         if ((reg != 0x00) && (reg != 0xff)) {
523
524                 if (reg & 0x04) {
525                         bluecard_receive(info, 0x00);
526                         outb(0x04, iobase + REG_INTERRUPT);
527                         outb(REG_COMMAND_RX_BUF_ONE, iobase + REG_COMMAND);
528                 }
529
530                 if (reg & 0x08) {
531                         bluecard_receive(info, 0x10);
532                         outb(0x08, iobase + REG_INTERRUPT);
533                         outb(REG_COMMAND_RX_BUF_TWO, iobase + REG_COMMAND);
534                 }
535
536                 if (reg & 0x01) {
537                         set_bit(XMIT_BUF_ONE_READY, &(info->tx_state));
538                         outb(0x01, iobase + REG_INTERRUPT);
539                         bluecard_write_wakeup(info);
540                 }
541
542                 if (reg & 0x02) {
543                         set_bit(XMIT_BUF_TWO_READY, &(info->tx_state));
544                         outb(0x02, iobase + REG_INTERRUPT);
545                         bluecard_write_wakeup(info);
546                 }
547
548         }
549
550         /* Enable interrupt */
551         info->ctrl_reg |= REG_CONTROL_INTERRUPT;
552         outb(info->ctrl_reg, iobase + REG_CONTROL);
553
554         spin_unlock(&(info->lock));
555
556         return IRQ_HANDLED;
557 }
558
559
560
561 /* ======================== Device specific HCI commands ======================== */
562
563
564 static int bluecard_hci_set_baud_rate(struct hci_dev *hdev, int baud)
565 {
566         struct bluecard_info *info = hci_get_drvdata(hdev);
567         struct sk_buff *skb;
568
569         /* Ericsson baud rate command */
570         unsigned char cmd[] = { HCI_COMMAND_PKT, 0x09, 0xfc, 0x01, 0x03 };
571
572         skb = bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC);
573         if (!skb) {
574                 BT_ERR("Can't allocate mem for new packet");
575                 return -1;
576         }
577
578         switch (baud) {
579         case 460800:
580                 cmd[4] = 0x00;
581                 hci_skb_pkt_type(skb) = PKT_BAUD_RATE_460800;
582                 break;
583         case 230400:
584                 cmd[4] = 0x01;
585                 hci_skb_pkt_type(skb) = PKT_BAUD_RATE_230400;
586                 break;
587         case 115200:
588                 cmd[4] = 0x02;
589                 hci_skb_pkt_type(skb) = PKT_BAUD_RATE_115200;
590                 break;
591         case 57600:
592                 /* Fall through... */
593         default:
594                 cmd[4] = 0x03;
595                 hci_skb_pkt_type(skb) = PKT_BAUD_RATE_57600;
596                 break;
597         }
598
599         skb_put_data(skb, cmd, sizeof(cmd));
600
601         skb_queue_tail(&(info->txq), skb);
602
603         bluecard_write_wakeup(info);
604
605         return 0;
606 }
607
608
609
610 /* ======================== HCI interface ======================== */
611
612
613 static int bluecard_hci_flush(struct hci_dev *hdev)
614 {
615         struct bluecard_info *info = hci_get_drvdata(hdev);
616
617         /* Drop TX queue */
618         skb_queue_purge(&(info->txq));
619
620         return 0;
621 }
622
623
624 static int bluecard_hci_open(struct hci_dev *hdev)
625 {
626         struct bluecard_info *info = hci_get_drvdata(hdev);
627         unsigned int iobase = info->p_dev->resource[0]->start;
628
629         if (test_bit(CARD_HAS_PCCARD_ID, &(info->hw_state)))
630                 bluecard_hci_set_baud_rate(hdev, DEFAULT_BAUD_RATE);
631
632         /* Enable power LED */
633         outb(0x08 | 0x20, iobase + 0x30);
634
635         return 0;
636 }
637
638
639 static int bluecard_hci_close(struct hci_dev *hdev)
640 {
641         struct bluecard_info *info = hci_get_drvdata(hdev);
642         unsigned int iobase = info->p_dev->resource[0]->start;
643
644         bluecard_hci_flush(hdev);
645
646         /* Stop LED timer */
647         del_timer_sync(&(info->timer));
648
649         /* Disable power LED */
650         outb(0x00, iobase + 0x30);
651
652         return 0;
653 }
654
655
656 static int bluecard_hci_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
657 {
658         struct bluecard_info *info = hci_get_drvdata(hdev);
659
660         switch (hci_skb_pkt_type(skb)) {
661         case HCI_COMMAND_PKT:
662                 hdev->stat.cmd_tx++;
663                 break;
664         case HCI_ACLDATA_PKT:
665                 hdev->stat.acl_tx++;
666                 break;
667         case HCI_SCODATA_PKT:
668                 hdev->stat.sco_tx++;
669                 break;
670         }
671
672         /* Prepend skb with frame type */
673         memcpy(skb_push(skb, 1), &hci_skb_pkt_type(skb), 1);
674         skb_queue_tail(&(info->txq), skb);
675
676         bluecard_write_wakeup(info);
677
678         return 0;
679 }
680
681
682
683 /* ======================== Card services HCI interaction ======================== */
684
685
686 static int bluecard_open(struct bluecard_info *info)
687 {
688         unsigned int iobase = info->p_dev->resource[0]->start;
689         struct hci_dev *hdev;
690         unsigned char id;
691
692         spin_lock_init(&(info->lock));
693
694         setup_timer(&(info->timer), &bluecard_activity_led_timeout,
695                     (u_long)info);
696
697         skb_queue_head_init(&(info->txq));
698
699         info->rx_state = RECV_WAIT_PACKET_TYPE;
700         info->rx_count = 0;
701         info->rx_skb = NULL;
702
703         /* Initialize HCI device */
704         hdev = hci_alloc_dev();
705         if (!hdev) {
706                 BT_ERR("Can't allocate HCI device");
707                 return -ENOMEM;
708         }
709
710         info->hdev = hdev;
711
712         hdev->bus = HCI_PCCARD;
713         hci_set_drvdata(hdev, info);
714         SET_HCIDEV_DEV(hdev, &info->p_dev->dev);
715
716         hdev->open  = bluecard_hci_open;
717         hdev->close = bluecard_hci_close;
718         hdev->flush = bluecard_hci_flush;
719         hdev->send  = bluecard_hci_send_frame;
720
721         id = inb(iobase + 0x30);
722
723         if ((id & 0x0f) == 0x02)
724                 set_bit(CARD_HAS_PCCARD_ID, &(info->hw_state));
725
726         if (id & 0x10)
727                 set_bit(CARD_HAS_POWER_LED, &(info->hw_state));
728
729         if (id & 0x20)
730                 set_bit(CARD_HAS_ACTIVITY_LED, &(info->hw_state));
731
732         /* Reset card */
733         info->ctrl_reg = REG_CONTROL_BT_RESET | REG_CONTROL_CARD_RESET;
734         outb(info->ctrl_reg, iobase + REG_CONTROL);
735
736         /* Turn FPGA off */
737         outb(0x80, iobase + 0x30);
738
739         /* Wait some time */
740         msleep(10);
741
742         /* Turn FPGA on */
743         outb(0x00, iobase + 0x30);
744
745         /* Activate card */
746         info->ctrl_reg = REG_CONTROL_BT_ON | REG_CONTROL_BT_RES_PU;
747         outb(info->ctrl_reg, iobase + REG_CONTROL);
748
749         /* Enable interrupt */
750         outb(0xff, iobase + REG_INTERRUPT);
751         info->ctrl_reg |= REG_CONTROL_INTERRUPT;
752         outb(info->ctrl_reg, iobase + REG_CONTROL);
753
754         if ((id & 0x0f) == 0x03) {
755                 /* Disable RTS */
756                 info->ctrl_reg |= REG_CONTROL_RTS;
757                 outb(info->ctrl_reg, iobase + REG_CONTROL);
758
759                 /* Set baud rate */
760                 info->ctrl_reg |= 0x03;
761                 outb(info->ctrl_reg, iobase + REG_CONTROL);
762
763                 /* Enable RTS */
764                 info->ctrl_reg &= ~REG_CONTROL_RTS;
765                 outb(info->ctrl_reg, iobase + REG_CONTROL);
766
767                 set_bit(XMIT_BUF_ONE_READY, &(info->tx_state));
768                 set_bit(XMIT_BUF_TWO_READY, &(info->tx_state));
769                 set_bit(XMIT_SENDING_READY, &(info->tx_state));
770         }
771
772         /* Start the RX buffers */
773         outb(REG_COMMAND_RX_BUF_ONE, iobase + REG_COMMAND);
774         outb(REG_COMMAND_RX_BUF_TWO, iobase + REG_COMMAND);
775
776         /* Signal that the hardware is ready */
777         set_bit(CARD_READY, &(info->hw_state));
778
779         /* Drop TX queue */
780         skb_queue_purge(&(info->txq));
781
782         /* Control the point at which RTS is enabled */
783         outb((0x0f << RTS_LEVEL_SHIFT_BITS) | 1, iobase + REG_RX_CONTROL);
784
785         /* Timeout before it is safe to send the first HCI packet */
786         msleep(1250);
787
788         /* Register HCI device */
789         if (hci_register_dev(hdev) < 0) {
790                 BT_ERR("Can't register HCI device");
791                 info->hdev = NULL;
792                 hci_free_dev(hdev);
793                 return -ENODEV;
794         }
795
796         return 0;
797 }
798
799
800 static int bluecard_close(struct bluecard_info *info)
801 {
802         unsigned int iobase = info->p_dev->resource[0]->start;
803         struct hci_dev *hdev = info->hdev;
804
805         if (!hdev)
806                 return -ENODEV;
807
808         bluecard_hci_close(hdev);
809
810         clear_bit(CARD_READY, &(info->hw_state));
811
812         /* Reset card */
813         info->ctrl_reg = REG_CONTROL_BT_RESET | REG_CONTROL_CARD_RESET;
814         outb(info->ctrl_reg, iobase + REG_CONTROL);
815
816         /* Turn FPGA off */
817         outb(0x80, iobase + 0x30);
818
819         hci_unregister_dev(hdev);
820         hci_free_dev(hdev);
821
822         return 0;
823 }
824
825 static int bluecard_probe(struct pcmcia_device *link)
826 {
827         struct bluecard_info *info;
828
829         /* Create new info device */
830         info = devm_kzalloc(&link->dev, sizeof(*info), GFP_KERNEL);
831         if (!info)
832                 return -ENOMEM;
833
834         info->p_dev = link;
835         link->priv = info;
836
837         link->config_flags |= CONF_ENABLE_IRQ;
838
839         return bluecard_config(link);
840 }
841
842
843 static void bluecard_detach(struct pcmcia_device *link)
844 {
845         bluecard_release(link);
846 }
847
848
849 static int bluecard_config(struct pcmcia_device *link)
850 {
851         struct bluecard_info *info = link->priv;
852         int i, n;
853
854         link->config_index = 0x20;
855
856         link->resource[0]->flags |= IO_DATA_PATH_WIDTH_8;
857         link->resource[0]->end = 64;
858         link->io_lines = 6;
859
860         for (n = 0; n < 0x400; n += 0x40) {
861                 link->resource[0]->start = n ^ 0x300;
862                 i = pcmcia_request_io(link);
863                 if (i == 0)
864                         break;
865         }
866
867         if (i != 0)
868                 goto failed;
869
870         i = pcmcia_request_irq(link, bluecard_interrupt);
871         if (i != 0)
872                 goto failed;
873
874         i = pcmcia_enable_device(link);
875         if (i != 0)
876                 goto failed;
877
878         if (bluecard_open(info) != 0)
879                 goto failed;
880
881         return 0;
882
883 failed:
884         bluecard_release(link);
885         return -ENODEV;
886 }
887
888
889 static void bluecard_release(struct pcmcia_device *link)
890 {
891         struct bluecard_info *info = link->priv;
892
893         bluecard_close(info);
894
895         del_timer_sync(&(info->timer));
896
897         pcmcia_disable_device(link);
898 }
899
900 static const struct pcmcia_device_id bluecard_ids[] = {
901         PCMCIA_DEVICE_PROD_ID12("BlueCard", "LSE041", 0xbaf16fbf, 0x657cc15e),
902         PCMCIA_DEVICE_PROD_ID12("BTCFCARD", "LSE139", 0xe3987764, 0x2524b59c),
903         PCMCIA_DEVICE_PROD_ID12("WSS", "LSE039", 0x0a0736ec, 0x24e6dfab),
904         PCMCIA_DEVICE_NULL
905 };
906 MODULE_DEVICE_TABLE(pcmcia, bluecard_ids);
907
908 static struct pcmcia_driver bluecard_driver = {
909         .owner          = THIS_MODULE,
910         .name           = "bluecard_cs",
911         .probe          = bluecard_probe,
912         .remove         = bluecard_detach,
913         .id_table       = bluecard_ids,
914 };
915 module_pcmcia_driver(bluecard_driver);