This commit was manufactured by cvs2svn to create tag
[linux-2.6.git] / drivers / serial / 8250_pnp.c
index a7af0b0..b79ed06 100644 (file)
@@ -250,6 +250,8 @@ static const struct pnp_device_id pnp_dev_table[] = {
        /* Kortex International */
        /* KORTEX 14400 Externe PnP */
        {       "ROK0100",              0       },
+       /* Rockwell 28.8 */
+       {       "ROK4120",              0       },
        /* Viking Components, Inc */
        /* Viking 28.8 INTERNAL Fax+Data+Voice PnP */
        {       "ROK4920",              0       },
@@ -270,8 +272,12 @@ static const struct pnp_device_id pnp_dev_table[] = {
        {       "SUP1421",              0       },
        /* SupraExpress 33.6 Data/Fax PnP modem */
        {       "SUP1590",              0       },
+       /* SupraExpress 336i Sp ASVD */
+       {       "SUP1620",              0       },
        /* SupraExpress 33.6 Data/Fax PnP modem */
        {       "SUP1760",              0       },
+       /* SupraExpress 56i Sp Intl */
+       {       "SUP2171",              0       },
        /* Phoebe Micro */
        /* Phoebe Micro 33.6 Data Fax 1433VQH Plug & Play */
        {       "TEX0011",              0       },
@@ -317,6 +323,8 @@ static const struct pnp_device_id pnp_dev_table[] = {
        {       "USR9180",              0       },
        /* U.S. Robotics 56K Voice INT PnP*/
        {       "USR9190",              0       },
+       /* HP Compaq Tablet PC tc1100 Wacom tablet */
+       {       "WACF005",              0       },
        /* Rockwell's (PORALiNK) 33600 INT PNP */
        {       "WCI0003",              0       },
        /* Unkown PnP modems */
@@ -392,7 +400,7 @@ static int __devinit serial_pnp_guess_board(struct pnp_dev *dev, int *flags)
 }
 
 static int __devinit
-serial_pnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_id)
+serial_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *dev_id)
 {
        struct uart_port port;
        int ret, line, flags = dev_id->driver_data;
@@ -404,29 +412,37 @@ serial_pnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_id)
        }
 
        memset(&port, 0, sizeof(struct uart_port));
-       port.irq = pnp_irq(dev,0);
-       port.iobase = pnp_port_start(dev, 0);
+       port.irq = pnp_irq(dev, 0);
+       if (pnp_port_valid(dev, 0)) {
+               port.iobase = pnp_port_start(dev, 0);
+               port.iotype = UPIO_PORT;
+       } else if (pnp_mem_valid(dev, 0)) {
+               port.mapbase = pnp_mem_start(dev, 0);
+               port.iotype = UPIO_MEM;
+               port.flags = UPF_IOREMAP;
+       } else
+               return -ENODEV;
 
 #ifdef SERIAL_DEBUG_PNP
-       printk("Setup PNP port: port %x, irq %d, type %d\n",
-              port.iobase, port.irq, port.iotype);
+       printk("Setup PNP port: port %x, mem 0x%lx, irq %d, type %d\n",
+              port.iobase, port.mapbase, port.irq, port.iotype);
 #endif
 
-       port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF;
+       port.flags |= UPF_SKIP_TEST | UPF_BOOT_AUTOCONF;
        port.uartclk = 1843200;
        port.dev = &dev->dev;
 
        line = serial8250_register_port(&port);
 
        if (line >= 0)
-               pnp_set_drvdata(dev, (void *)(line + 1));
+               pnp_set_drvdata(dev, (void *)((long)line + 1));
        return line >= 0 ? 0 : -ENODEV;
 
 }
 
-static void __devexit serial_pnp_remove(struct pnp_dev * dev)
+static void __devexit serial_pnp_remove(struct pnp_dev *dev)
 {
-       int line = (int)pnp_get_drvdata(dev);
+       long line = (long)pnp_get_drvdata(dev);
        if (line)
                serial8250_unregister_port(line - 1);
 }