This patch adds PNP functionality to the smsc-ircc2 driver as it was posted by Ville Syrjälä some time ago on Usenet.
It was ported to 2.6.17 by Andreas Böhler
Be aware that it was only tested on a BenQ Joybook 6000, I don't know what the new PCI-Code does on a Toshiba in conjunction with PNP-Probing! Try this at your own risk!

--- drivers/net/irda/smsc-ircc2.c.orig	2006-06-28 23:27:53.000000000 +0000
+++ drivers/net/irda/smsc-ircc2.c	2006-06-28 23:34:06.000000000 +0000
@@ -74,6 +74,7 @@
 #include "smsc-ircc2.h"
 #include "smsc-sio.h"
 
+static int pnp_registered_port;
 
 MODULE_AUTHOR("Daniele Peri <peri@csai.unipa.it>");
 MODULE_DESCRIPTION("SMC IrCC SIR/FIR controller driver");
@@ -367,6 +368,50 @@ static const struct pnp_device_id smsc_i
 	{ }
 };
 MODULE_DEVICE_TABLE(pnp, smsc_ircc_pnp_table);
+
+static int __devinit
+smsc_ircc_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *id)
+{
+	unsigned int firbase, sirbase;
+	u8 dma, irq;
+
+	if (pnp_port_valid(dev, 0) &&
+	   !(pnp_port_flags(dev, 0) & IORESOURCE_DISABLED))
+		sirbase = pnp_port_start(dev, 0);
+	else
+		return -EINVAL;
+
+	if (pnp_port_valid(dev, 1) &&
+	   !(pnp_port_flags(dev, 1) & IORESOURCE_DISABLED))
+		firbase = pnp_port_start(dev, 1);
+	else
+		return -EINVAL;
+
+	if (pnp_irq_valid(dev, 0) &&
+	   !(pnp_irq_flags(dev, 0) & IORESOURCE_DISABLED))
+		irq = pnp_irq(dev, 0);
+	else
+		return -EINVAL;
+
+	if (pnp_dma_valid(dev, 0) &&
+	   !(pnp_dma_flags(dev, 0) & IORESOURCE_DISABLED))
+		dma = pnp_dma(dev, 0);
+	else
+		return -EINVAL;
+
+	if (smsc_ircc_open(firbase, sirbase, dma, irq))
+		return -ENODEV;
+
+	return 0;
+}
+
+static struct pnp_driver smsc_ircc_pnp_driver = {
+	.name = "smsc-ircc2",
+	.id_table = smsc_ircc_pnp_table,
+	.probe = smsc_ircc_pnp_probe,
+};
+
+
 #endif
 
 
@@ -1833,7 +1878,10 @@ static void __exit smsc_ircc_cleanup(voi
 	int i;
 
 	IRDA_DEBUG(1, "%s\n", __FUNCTION__);
-
+#ifdef CONFIG_PNP
+	if (pnp_registered_port)
+		pnp_unregister_driver(&smsc_ircc_pnp_driver);
+#endif
 	for (i = 0; i < 2; i++) {
 		if (dev_self[i])
 			smsc_ircc_close(dev_self[i]);
@@ -2092,10 +2140,19 @@ static int __init smsc_ircc_look_for_chi
 	struct smsc_chip_address *address;
 	char *type;
 	unsigned int cfg_base, found;
+	int err;
 
 	found = 0;
 	address = possible_addresses;
 
+#ifdef CONFIG_PNP
+	err = pnp_register_driver(&smsc_ircc_pnp_driver);
+	if(!err) {
+	       pnp_registered_port = 1;
+	       found++; //FIXME: We assume only one device is found by PNP!
+	}
+#endif
+
 	while (address->cfg_base) {
 		cfg_base = address->cfg_base;
 
