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