IBM Bluetooth PC Card II - configuration problem

Dominik Brodowski linux at dominikbrodowski.net
Sun Jan 3 11:56:04 EST 2010


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:
> root at 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
-------------- next part --------------
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 ||
-------------- next part --------------
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 ||


More information about the linux-pcmcia mailing list