serial: 8250_pci: add support for MCS9865 / SYBA 6x Serial Port Card
Ira W. Snyder [Tue, 22 Dec 2009 00:26:45 +0000 (16:26 -0800)]
This patch is heavily based on an earlier patch found on the linux-serial
mailing list [1], written by Darius Augulis.

The previous incarnation of this patch only supported a 2x serial port
card.  I have added support for my SYBA 6x serial port card, and tested on
x86.

[1]: http://marc.info/?l=linux-serial&m=124975806304760

Signed-off-by: Ira W. Snyder <iws@ovro.caltech.edu>
Cc: Darius Augulis <augulis.darius@gmail.com>
Cc: Greg KH <greg@kroah.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

drivers/parport/parport_pc.c
drivers/serial/8250_pci.c
include/linux/pci_ids.h

index ad113b0..0950fa4 100644 (file)
@@ -2908,6 +2908,7 @@ enum parport_pc_pci_cards {
        netmos_9805,
        netmos_9815,
        netmos_9901,
+       netmos_9865,
        quatech_sppxp100,
 };
 
@@ -2989,6 +2990,7 @@ static struct parport_pc_pci {
        /* netmos_9805 */               { 1, { { 0, -1 }, } },
        /* netmos_9815 */               { 2, { { 0, -1 }, { 2, -1 }, } },
        /* netmos_9901 */               { 1, { { 0, -1 }, } },
+       /* netmos_9865 */               { 1, { { 0, -1 }, } },
        /* quatech_sppxp100 */          { 1, { { 0, 1 }, } },
 };
 
@@ -3092,6 +3094,10 @@ static const struct pci_device_id parport_pc_pci_tbl[] = {
          PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9815 },
        { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9901,
          0xA000, 0x2000, 0, 0, netmos_9901 },
+       { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865,
+         0xA000, 0x1000, 0, 0, netmos_9865 },
+       { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865,
+         0xA000, 0x2000, 0, 0, netmos_9865 },
        /* Quatech SPPXP-100 Parallel port PCI ExpressCard */
        { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_SPPXP_100,
          PCI_ANY_ID, PCI_ANY_ID, 0, 0, quatech_sppxp100 },
index b28af13..8b18c3c 100644 (file)
@@ -760,7 +760,8 @@ static int pci_netmos_init(struct pci_dev *dev)
        /* subdevice 0x00PS means <P> parallel, <S> serial */
        unsigned int num_serial = dev->subsystem_device & 0xf;
 
-       if (dev->device == PCI_DEVICE_ID_NETMOS_9901)
+       if ((dev->device == PCI_DEVICE_ID_NETMOS_9901) ||
+               (dev->device == PCI_DEVICE_ID_NETMOS_9865))
                return 0;
        if (dev->subsystem_vendor == PCI_VENDOR_ID_IBM &&
                        dev->subsystem_device == 0x0299)
@@ -1479,6 +1480,7 @@ enum pci_board_num_t {
 
        pbn_b0_bt_1_115200,
        pbn_b0_bt_2_115200,
+       pbn_b0_bt_4_115200,
        pbn_b0_bt_8_115200,
 
        pbn_b0_bt_1_460800,
@@ -1703,6 +1705,12 @@ static struct pciserial_board pci_boards[] __devinitdata = {
                .base_baud      = 115200,
                .uart_offset    = 8,
        },
+       [pbn_b0_bt_4_115200] = {
+               .flags          = FL_BASE0|FL_BASE_BARS,
+               .num_ports      = 4,
+               .base_baud      = 115200,
+               .uart_offset    = 8,
+       },
        [pbn_b0_bt_8_115200] = {
                .flags          = FL_BASE0|FL_BASE_BARS,
                .num_ports      = 8,
@@ -3649,6 +3657,18 @@ static struct pci_device_id serial_pci_tbl[] = {
                0, 0, pbn_b0_1_115200 },
 
        /*
+        * Best Connectivity PCI Multi I/O cards
+        */
+
+       {       PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865,
+               0xA000, 0x1000,
+               0, 0, pbn_b0_1_115200 },
+
+       {       PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865,
+               0xA000, 0x3004,
+               0, 0, pbn_b0_bt_4_115200 },
+
+       /*
         * These entries match devices with class COMMUNICATION_SERIAL,
         * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL
         */
index 0be8243..3ec4003 100644 (file)
 #define PCI_DEVICE_ID_NETMOS_9835      0x9835
 #define PCI_DEVICE_ID_NETMOS_9845      0x9845
 #define PCI_DEVICE_ID_NETMOS_9855      0x9855
+#define PCI_DEVICE_ID_NETMOS_9865      0x9865
 #define PCI_DEVICE_ID_NETMOS_9901      0x9901
 
 #define PCI_VENDOR_ID_3COM_2           0xa727