I've an HP OmniBook 6100 running linux 2.4.18 and I've
had a bear of a time getting IR support up and going.

Some thoughts before I continue: 
I'd really like to see some better documentation on
the ir-tools.. for example irdadump (at least in my
case) needed to be told which irda device (irda0) to
listen on or else it just sat there and showed
nothing. For the longest time i just ran 'irdadump' by
itself and had no idea that was bad. Nothing said
'error' or invalid command line or anything like that.

Also, thanks to many of the mailing lists, I learned
that I had to compile serial support in as a module
and then remove the module so that 0x2f8/irq 3 would
be free for the driver.. That was key as well.

From
http://www.hpl.hp.com/personal/Jean_Tourrilhes/IrDA/IrDA.html
:

* Remove the serial driver that gets in the way :

> setserial /dev/ttyS1 uart none
> rmmod serial

>From win2k, I knew it was an NSC chip with dongle_id
0x08 .

findchip started to see it, but it says:

[root@plastic root]# findchip -d -v nsc
Probing for PC87108 ...
no chip at 0x150
no chip at 0x398
no chip at 0x0ea
Probing for PC87338 ...
no chip at 0x398
no chip at 0x15c
Wrong chip id=0x00

so that was no good. Luckily, I had seen a similar
output from the kernel driver, which i was more than
willing to poke around in. Some quick checks
determined that:

It was a PC87388, id 0, cid_mask 248, revision ??

So I hacked in the driver and removed the checks that
I found offensive, and adjusted values to what i have.
Dirty!

Here's the relevant part of my modules.conf

options nsc-ircc dongle_id=0x08 io=0x2f8 irq=3
alias irda0 nsc-ircc


Here's the output from insmod/modprobe:

[root@plastic root]# modprobe irda
[root@plastic root]# echo 3 > /proc/sys/net/irda/debug

[root@plastic root]# modprobe nsc-ircc
[root@plastic root]# dmesg
.
.
.
[snip]
.
.
.
nsc_ircc_init(), Probing for PC87108 ...
nsc_ircc_init() no chip at 0x150
nsc_ircc_init() no chip at 0x398
nsc_ircc_init() no chip at 0x0ea
nsc_ircc_init(), Probing for PC87338 ...
nsc_ircc_init() Found PC87338 chip, id=0,
cid_mask=248, revision=0
nsc_ircc_init() Found PC87338 chip, revision=0
nsc_ircc_open()
nsc-ircc, Found chip at base=0x02e
nsc_ircc_setup() Driver nsc-ircc Found chip version 24
nsc-ircc, driver loaded (Dag Brattli)
IrDA: Registered device irda0
nsc-ircc, Using dongle: HP HSDL-2300, HP
HSDL-3600/HSDL-3610
nsc_ircc_init_dongle_interface(), HP HSDL-2300, HP
HSDL-3600/HSDL-3610
nsc_ircc_init() no chip at 0x398
nsc_ircc_init() no chip at 0x15c
nsc_ircc_net_ioctl(), irda0, (cmd=0x8B01)


after that, I just ran
[root@plastic root]# irattach irda0 -s 1

and all was well.

Here's the diff from the stock nsc-ircc.c vs my hacked
one:

[root@plastic irda]# diff -U 3 nsc-ircc.c.old
nsc-ircc.c
--- nsc-ircc.c.old      Mon Mar 18 14:47:39 2002
+++ nsc-ircc.c  Mon Mar 18 14:41:28 2002
@@ -90,7 +90,7 @@
 static nsc_chip_t chips[] = {
        { "PC87108", { 0x150, 0x398, 0xea }, 0x05,
0x10, 0xf0, 
          nsc_ircc_probe_108, nsc_ircc_init_108 },
-       { "PC87338", { 0x398, 0x15c, 0x2e }, 0x08,
0xb0, 0xf8, 
+       { "PC87338", { 0x2e, 0x398, 0x15c }, 0x08,
0xb0, 0xf8, 
          nsc_ircc_probe_338, nsc_ircc_init_338 },
        { NULL }
 };
@@ -187,7 +187,13 @@
                        /* Read chip identification
register */
                        outb(chip->cid_index,
cfg_base);
                        id = inb(cfg_base+1);
-                       if ((id & chip->cid_mask) ==
chip->cid_value) {
+                       /* hacked in to test by tmk */
+                       IRDA_DEBUG(2, __FUNCTION__ 
+                          "() Found %s chip, id=%d,
cid_mask=%d, revision=%d\n",
+                          chip->name, id,
chip->cid_mask, id & ~chip->cid_mask );
+                       /* if ((id & chip->cid_mask)
== chip->cid_value) { */
+                       /* 0 matches, so we'll use
that for now..  -tmk */
+                       if ((id & chip->cid_mask) ==
0) {
                                IRDA_DEBUG(2,
__FUNCTION__ 
                                           "() Found
%s chip, revision=%d\n",
                                           chip->name,
id & ~chip->cid_mask);
@@ -697,12 +703,14 @@
        /* Read the Module ID */
        switch_bank(iobase, BANK3);
        version = inb(iobase+MID);
-
-       /* Should be 0x2? */
+       /* this part 'fixed' by tmk */
+       IRDA_DEBUG(2, __FUNCTION__ 
+          "() Driver %s Found chip version %02x\n",
driver_name, version);
+       /* Should be 0x2? 
        if (0x20 != (version & 0xf0)) {
                ERROR("%s, Wrong chip version %02x\n",
driver_name, version);
                return -1;
-       }
+       } */
 
        /* Switch to advanced mode */
        switch_bank(iobase, BANK2);


__________________________________________________
Do You Yahoo!?
Yahoo! Sports - live college hoops coverage
http://sports.yahoo.com/
_______________________________________________
Linux-IrDA mailing list  -  [EMAIL PROTECTED]
http://www.pasta.cs.UiT.No/mailman/listinfo/linux-irda

Reply via email to