Hi, On Fri, Feb 27, 2009 at 5:54 PM, Philipp Zabel <philipp.zabel@xxxxxxxxx> wrote: > pcmcia_loop_config returns 0 on success. > > Signed-off-by: Philipp Zabel <philipp.zabel@xxxxxxxxx> > --- > drivers/bluetooth/dtl1_cs.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/drivers/bluetooth/dtl1_cs.c b/drivers/bluetooth/dtl1_cs.c > index 901bdd9..e0ee642 100644 > --- a/drivers/bluetooth/dtl1_cs.c > +++ b/drivers/bluetooth/dtl1_cs.c > @@ -616,7 +616,7 @@ static int dtl1_config(struct pcmcia_device *link) > > /* Look for a generic full-sized window */ > link->io.NumPorts1 = 8; > - if (!pcmcia_loop_config(link, dtl1_confcheck, NULL)) > + if (pcmcia_loop_config(link, dtl1_confcheck, NULL)) > goto failed; > > i = pcmcia_request_irq(link, &link->irq); > -- > 1.5.6.5 with this change my Nokia DTL-1 CF card gets detected, but the interface stays down. # hciconfig hci0 up Can't init device hci0: Connection timed out (110) I added some printk's to dtl_write and dtl_receive to dump the TX/RX bytes and rx_count (in parentheses): pcmcia 1.0: pcmcia: registering new device pcmcia1.0 dtl1_receive: 80(4) 10(3) 02(2) 00(1) 0f(2) 00(1) <6> Bluetooth: Nokia control data = 0f 00 dtl1_write: 81 00 03 00 03 0c 00 00 dtl1_interrupt: RLSI dtl1_receive: 00(4) dtl1_receive: 80(3) 10(2) 02(1) 00(528) 0f(527) 00(526) dtl1_receive: 84(525) 00(524) 06(523) 00(522) 0e(521) 04(520) 04(519) 03(518) dtl1_receive: 0c(517) 00(516) dtl1_write: 81 00 03 00 03 0c 00 00 dtl1_interrupt: RLSI dtl1_receive: 00(515) dtl1_receive: 80(514) 10(513) 02(512) 00(511) 0f(510) 00(509) dtl1_receive: 84(508) 00(507) 06(506) 00(505) 0e(504) 04(503) 04(502) dtl1_receive: 03(501) dtl1_receive: 0c(500) dtl1_receive: 00(499) It seems the culprit is the stray zero byte read after the RLSI interrupt causing the 0x80 packet type to be interpreted as length. I can work around this error with the following patch: diff --git a/drivers/bluetooth/dtl1_cs.c b/drivers/bluetooth/dtl1_cs.c index e0ee642..91c4c92 100644 --- a/drivers/bluetooth/dtl1_cs.c +++ b/drivers/bluetooth/dtl1_cs.c @@ -210,6 +210,7 @@ static void dtl1_receive(dtl1_info_t *info) unsigned int iobase; nsh_t *nsh; int boguscount = 0; + __u8 byte; if (!info) { BT_ERR("Unknown device"); @@ -230,10 +231,16 @@ static void dtl1_receive(dtl1_info_t *info) return; } - *skb_put(info->rx_skb, 1) = inb(iobase + UART_RX); - nsh = (nsh_t *)info->rx_skb->data; + byte = inb(iobase + UART_RX); - info->rx_count--; + if ((info->rx_state == RECV_WAIT_NSH) && (info->rx_count == NSHL) && (byte == 0)) { + continue; + } else { + *skb_put(info->rx_skb, 1) = byte; + nsh = (nsh_t *)info->rx_skb->data; + + info->rx_count--; + } if (info->rx_count == 0) { But I fear this just covers up an error somewhere else. Can this RSLI error and zero byte read be avoided somehow? regards Philipp -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html