Hi! I wanted to let you all know that IrDA on this laptop is not mysteriously "disabled" or otherwise tampered with by BIOS so that only Windows XP can see and use it. It is a standard NSC338 chip which either incorrectly identifies its version or does it properly but nsc-ircc driver in the Linux kernel thinks it doesn't support it. Either way an extremly simple patch (attached) allows you to enjoy full IrDA (to be honest I've tested FIR only but I suspect that if FIR works SIR will work nicely either) on the laptop. In case anybody is interested I learned that it's so simple the hard way. I made a full PCI register dump of the PCI-ISA bridge under Windows XP. Then I made similar dump under Linux only to learn that only two bits differ which seemed to be irrelevant. It surprised me a lot as I thought that the PCI-ISA bridge isn't decoding NSC chip addresses and that is why IrDA is not working. I recompiled irda with debug options to find out what is failing. Trying to load nsc-ircc.o yielded: Mar 1 21:00:51 marcin kernel: nsc-ircc, Found chip at base=0x02e Mar 1 21:00:51 marcin kernel: nsc-ircc, Wrong chip version 0c I googled a little bit and found this: http://lists.debian.org/debian-laptop/2002/debian-laptop-200204/msg00269.html which advises to disable chip version check in nsc-ircc. This is exactly what the attached patch does. After recompiling modules everything worked like charm. The only glitch is that it sometimes recognizes dongle as 'IBM31T1100 or Temic TFDS6000/TFDS6500' and sometimes as 'HP HSDL-1100/HSDL-2100'. Probably this version check is broken, too. This doesn't, however, affect in any way the working of the driver and I successfully tested IrDA on both. To properly load nsc-ircc.o you need to supply information on DMA, IRQ and io_base: modprobe nsc-ircc irq=3 dma=3 io=0x2f8 dongle_id=0x09 The values here are taken from Windows XP, dongle 0x09 is IBM as I think this it the more probable one given the manufacturer ;-) For nsc-ircc to load properly without complying about then it can't get iobase of 0x2f8 you need to disable serial ports by hand (or even unload the serial module/not even compile it as R31 doesn't have any external RS232 connectors anyway): setserial /dev/ttyS0 uart none setserial /dev/ttyS1 uart none After nsc-ircc loaded flawlessly I checked that it was indeed working by looking at /proc/net/irda/discovery which correctly indicated it found my LaserJet 6P in sight. Next I loaded ircomm and printed a CUPS test page to /dev/irlpt0. FULL SUCCESS! Hope you will now enjoy the beautiful world of GPRS :-) Best regards, Marcin --Boundary-00=_2nSY+5VTqbxFRD5 Content-Type: text/x-diff; charset="us-ascii"; name="irda.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="irda.diff" --- kernel-source-2.4.20/drivers/net/irda/nsc-ircc.c 2003-01-04 11:08:19.000000000 +0100 +++ kernel-source-2.4.21-pre4/drivers/net/irda/nsc-ircc.c 2003-03-01 21:07:24.000000000 +0100 @@ -704,10 +704,12 @@ driver_name, version); /* Should be 0x2? */ +#if 0 if (0x20 != (version & 0xf0)) { ERROR("%s, Wrong chip version %02x\n", driver_name, version); return -1; } +#endif /* Switch to advanced mode */ switch_bank(iobase, BANK2); --Boundary-00=_2nSY+5VTqbxFRD5-- _______________________________________________ R31 mailing list R31@rnbhq.org http://rnbhq.org/cgi-bin/mailman/listinfo/r31