Hey,

On Sun, Jan 03, 2010 at 02:31:34PM +0100, Szigetvári János wrote:
> However there is now an other thing. The kernel recognizes the card as
> having two serial UART-s:
> 
> pcmcia_socket pcmcia_socket1: pccard: PCMCIA card inserted into slot 1
> pcmcia 1.0: pcmcia: registering new device pcmcia1.0
> pcmcia 1.0: firmware: requesting cis/IBMBT.cis
> ttyS1: detected caps 00000700 should be 00000100
> 1.0: ttyS1 at I/O 0x1e0 (irq = 3) is a 16C950/954
> 1.0: ttyS2 at I/O 0x1e8 (irq = 3) is a 8250
> 
> As the guys back at
> http://osdir.com/ml/linux.pcmcia.devel/2003-04/msg00001.html said this
> card uses a Oxford Semuconductor 16950-based UART. As it can be seen
> it is (correctly?) detected. However the kernel detects another UART
> of an older type. I don't really know why that is.

Well, as Dave said in this message

| The serial_cs driver also has some code to recognize and treat OXCF950
| based cards specially, and you may need to tweak that to recognize the
| manfid's for this card.

so let's try this -- first patch #1, and if that isn't enough, patch #2; if
both do not work I have one other idea...

> After some googling I found out that this is a TDK-made card, and that
> instead of "any", I should try "tdk" as the UART type:
> r...@orion:~# hciattach -p ttyS1 tdk
> BCSP initialization timed out.

As the MANFID is the same as for TDK cards, it seems likely that it indeed
behaves like a TDK-made card...

Best,
        Dominik
diff --git a/drivers/serial/serial_cs.c b/drivers/serial/serial_cs.c
index fc413f0..3dc3450 100644
--- a/drivers/serial/serial_cs.c
+++ b/drivers/serial/serial_cs.c
@@ -598,8 +598,11 @@ static int multi_config(struct pcmcia_device *link)
         * 8 registers are for the UART, the others are extra registers.
         * Siemen's MC45 PCMCIA (Possio's GCC) is OXCF950 based too.
         */
-       if (info->manfid == MANFID_OXSEMI || (info->manfid == MANFID_POSSIO &&
-                               info->prodid == PRODID_POSSIO_GCC)) {
+       if (info->manfid == MANFID_OXSEMI ||
+           (info->manfid == MANFID_POSSIO &&
+            info->prodid == PRODID_POSSIO_GCC) ||
+           (info->manfid == 0x0105 && /* IBM Bluetotth PC Card II */
+            info->prodid == 0x4254)) {
                int err;
 
                if (link->conf.ConfigIndex == 1 ||
diff --git a/drivers/serial/serial_cs.c b/drivers/serial/serial_cs.c
index fc413f0..d9bb320 100644
--- a/drivers/serial/serial_cs.c
+++ b/drivers/serial/serial_cs.c
@@ -222,6 +222,11 @@ static const struct serial_quirk quirks[] = {
                .multi  = -1,
                .wakeup = quirk_wakeup_oxsemi,
        }, {
+               .manfid = 0x0105, /* IBM Bluetooth PC Card II */
+               .prodid = 0x4254,
+               .multi  = -1,
+               .wakeup = quirk_wakeup_oxsemi,
+       }, {
                .manfid = MANFID_POSSIO,
                .prodid = PRODID_POSSIO_GCC,
                .multi  = -1,
@@ -598,8 +603,11 @@ static int multi_config(struct pcmcia_device *link)
         * 8 registers are for the UART, the others are extra registers.
         * Siemen's MC45 PCMCIA (Possio's GCC) is OXCF950 based too.
         */
-       if (info->manfid == MANFID_OXSEMI || (info->manfid == MANFID_POSSIO &&
-                               info->prodid == PRODID_POSSIO_GCC)) {
+       if (info->manfid == MANFID_OXSEMI ||
+           (info->manfid == MANFID_POSSIO &&
+            info->prodid == PRODID_POSSIO_GCC) ||
+           (info->manfid == 0x0105 && /* IBM Bluetotth PC Card II */
+            info->prodid == 0x4254)) {
                int err;
 
                if (link->conf.ConfigIndex == 1 ||
_______________________________________________
Linux PCMCIA reimplementation list
http://lists.infradead.org/mailman/listinfo/linux-pcmcia

Reply via email to