--- linux/drivers/net/irda/nsc-ircc.c.orig 2003-11-25 09:34:37.000000000 +0100 +++ linux/drivers/net/irda/nsc-ircc.c 2003-11-25 11:03:51.000000000 +0100 @@ -80,6 +80,7 @@ static unsigned int io[] = { ~0, ~0, ~0, ~0 }; static unsigned int irq[] = { 0, 0, 0, 0, 0 }; static unsigned int dma[] = { 0, 0, 0, 0, 0 }; +static unsigned int noprobe[] = { 0, 0, 0, 0 }; static int nsc_ircc_probe_108(nsc_chip_t *chip, chipio_t *info); static int nsc_ircc_probe_338(nsc_chip_t *chip, chipio_t *info); @@ -161,13 +162,40 @@ int cfg_base; int cfg, id; int reg; - int i = 0; + int i; + + /* attach to devices specified by the user with noprobe */ + for (i=0; i<4; i++) { + if (noprobe[i]) { + IRDA_DEBUG(2, "%s(), Attaching to unknown controller " + "at 0x%x (irq %u, dma %u) ...\n", + io[i], irq[i], dma[i]); + memset(&info, 0, sizeof(chipio_t)); + info.fir_base = io[i]; + info.dma = dma[i]; + info.irq = irq[i]; + + if (nsc_ircc_open(i, &info) == 0) + ret = 0; + } + } + + if (noprobe[0] && noprobe[1] && noprobe[2] && noprobe[3]) + return ret; + + i = 0; /* Probe for all the NSC chipsets we know about */ for (chip=chips; chip->name ; chip++) { IRDA_DEBUG(2, "%s(), Probing for %s ...\n", __FUNCTION__, chip->name); - + + while (noprobe[i]) + i++; + + if (i == 4) + break; + /* Try all config registers for this chip */ for (cfg=0; cfg<3; cfg++) { cfg_base = chip->cfg[cfg]; @@ -253,8 +281,10 @@ IRDA_DEBUG(2, "%s()\n", __FUNCTION__); - MESSAGE("%s, Found chip at base=0x%03x\n", driver_name, - info->cfg_base); + if (!noprobe[i]) { + MESSAGE("%s, Found chip at base=0x%03x\n", driver_name, + info->cfg_base); + } if ((nsc_ircc_setup(info)) == -1) return -1; @@ -2058,6 +2088,8 @@ MODULE_PARM_DESC(dma, "DMA channels"); MODULE_PARM(dongle_id, "i"); MODULE_PARM_DESC(dongle_id, "Type-id of used dongle"); +MODULE_PARM(noprobe, "1-4i"); +MODULE_PARM_DESC(noprobe, "Do not probe chipset, just attach"); int init_module(void) {