aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIra W. Snyder <iws@ovro.caltech.edu>2009-12-21 19:26:45 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2010-03-02 17:43:08 -0500
commitac6ec5b1de5d1d5afcbe88d73c05df71dca0ac39 (patch)
tree4a850ab01492dafc82a94cccac9790bd8be0f32a
parentde538eb3441e8b9f7aedb3a37e46c005538451dc (diff)
serial: 8250_pci: add support for MCS9865 / SYBA 6x Serial Port Card
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>
-rw-r--r--drivers/parport/parport_pc.c6
-rw-r--r--drivers/serial/8250_pci.c22
-rw-r--r--include/linux/pci_ids.h1
3 files changed, 28 insertions, 1 deletions
diff --git a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c
index ad113b0f62db..0950fa40684f 100644
--- a/drivers/parport/parport_pc.c
+++ b/drivers/parport/parport_pc.c
@@ -2908,6 +2908,7 @@ enum parport_pc_pci_cards {
2908 netmos_9805, 2908 netmos_9805,
2909 netmos_9815, 2909 netmos_9815,
2910 netmos_9901, 2910 netmos_9901,
2911 netmos_9865,
2911 quatech_sppxp100, 2912 quatech_sppxp100,
2912}; 2913};
2913 2914
@@ -2989,6 +2990,7 @@ static struct parport_pc_pci {
2989 /* netmos_9805 */ { 1, { { 0, -1 }, } }, 2990 /* netmos_9805 */ { 1, { { 0, -1 }, } },
2990 /* netmos_9815 */ { 2, { { 0, -1 }, { 2, -1 }, } }, 2991 /* netmos_9815 */ { 2, { { 0, -1 }, { 2, -1 }, } },
2991 /* netmos_9901 */ { 1, { { 0, -1 }, } }, 2992 /* netmos_9901 */ { 1, { { 0, -1 }, } },
2993 /* netmos_9865 */ { 1, { { 0, -1 }, } },
2992 /* quatech_sppxp100 */ { 1, { { 0, 1 }, } }, 2994 /* quatech_sppxp100 */ { 1, { { 0, 1 }, } },
2993}; 2995};
2994 2996
@@ -3092,6 +3094,10 @@ static const struct pci_device_id parport_pc_pci_tbl[] = {
3092 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9815 }, 3094 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9815 },
3093 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9901, 3095 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9901,
3094 0xA000, 0x2000, 0, 0, netmos_9901 }, 3096 0xA000, 0x2000, 0, 0, netmos_9901 },
3097 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865,
3098 0xA000, 0x1000, 0, 0, netmos_9865 },
3099 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865,
3100 0xA000, 0x2000, 0, 0, netmos_9865 },
3095 /* Quatech SPPXP-100 Parallel port PCI ExpressCard */ 3101 /* Quatech SPPXP-100 Parallel port PCI ExpressCard */
3096 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_SPPXP_100, 3102 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_SPPXP_100,
3097 PCI_ANY_ID, PCI_ANY_ID, 0, 0, quatech_sppxp100 }, 3103 PCI_ANY_ID, PCI_ANY_ID, 0, 0, quatech_sppxp100 },
diff --git a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c
index b28af13c45a1..8b18c3ce3898 100644
--- a/drivers/serial/8250_pci.c
+++ b/drivers/serial/8250_pci.c
@@ -760,7 +760,8 @@ static int pci_netmos_init(struct pci_dev *dev)
760 /* subdevice 0x00PS means <P> parallel, <S> serial */ 760 /* subdevice 0x00PS means <P> parallel, <S> serial */
761 unsigned int num_serial = dev->subsystem_device & 0xf; 761 unsigned int num_serial = dev->subsystem_device & 0xf;
762 762
763 if (dev->device == PCI_DEVICE_ID_NETMOS_9901) 763 if ((dev->device == PCI_DEVICE_ID_NETMOS_9901) ||
764 (dev->device == PCI_DEVICE_ID_NETMOS_9865))
764 return 0; 765 return 0;
765 if (dev->subsystem_vendor == PCI_VENDOR_ID_IBM && 766 if (dev->subsystem_vendor == PCI_VENDOR_ID_IBM &&
766 dev->subsystem_device == 0x0299) 767 dev->subsystem_device == 0x0299)
@@ -1479,6 +1480,7 @@ enum pci_board_num_t {
1479 1480
1480 pbn_b0_bt_1_115200, 1481 pbn_b0_bt_1_115200,
1481 pbn_b0_bt_2_115200, 1482 pbn_b0_bt_2_115200,
1483 pbn_b0_bt_4_115200,
1482 pbn_b0_bt_8_115200, 1484 pbn_b0_bt_8_115200,
1483 1485
1484 pbn_b0_bt_1_460800, 1486 pbn_b0_bt_1_460800,
@@ -1703,6 +1705,12 @@ static struct pciserial_board pci_boards[] __devinitdata = {
1703 .base_baud = 115200, 1705 .base_baud = 115200,
1704 .uart_offset = 8, 1706 .uart_offset = 8,
1705 }, 1707 },
1708 [pbn_b0_bt_4_115200] = {
1709 .flags = FL_BASE0|FL_BASE_BARS,
1710 .num_ports = 4,
1711 .base_baud = 115200,
1712 .uart_offset = 8,
1713 },
1706 [pbn_b0_bt_8_115200] = { 1714 [pbn_b0_bt_8_115200] = {
1707 .flags = FL_BASE0|FL_BASE_BARS, 1715 .flags = FL_BASE0|FL_BASE_BARS,
1708 .num_ports = 8, 1716 .num_ports = 8,
@@ -3649,6 +3657,18 @@ static struct pci_device_id serial_pci_tbl[] = {
3649 0, 0, pbn_b0_1_115200 }, 3657 0, 0, pbn_b0_1_115200 },
3650 3658
3651 /* 3659 /*
3660 * Best Connectivity PCI Multi I/O cards
3661 */
3662
3663 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865,
3664 0xA000, 0x1000,
3665 0, 0, pbn_b0_1_115200 },
3666
3667 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865,
3668 0xA000, 0x3004,
3669 0, 0, pbn_b0_bt_4_115200 },
3670
3671 /*
3652 * These entries match devices with class COMMUNICATION_SERIAL, 3672 * These entries match devices with class COMMUNICATION_SERIAL,
3653 * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL 3673 * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL
3654 */ 3674 */
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index 0be824320580..3ec4003f5e64 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -2697,6 +2697,7 @@
2697#define PCI_DEVICE_ID_NETMOS_9835 0x9835 2697#define PCI_DEVICE_ID_NETMOS_9835 0x9835
2698#define PCI_DEVICE_ID_NETMOS_9845 0x9845 2698#define PCI_DEVICE_ID_NETMOS_9845 0x9845
2699#define PCI_DEVICE_ID_NETMOS_9855 0x9855 2699#define PCI_DEVICE_ID_NETMOS_9855 0x9855
2700#define PCI_DEVICE_ID_NETMOS_9865 0x9865
2700#define PCI_DEVICE_ID_NETMOS_9901 0x9901 2701#define PCI_DEVICE_ID_NETMOS_9901 0x9901
2701 2702
2702#define PCI_VENDOR_ID_3COM_2 0xa727 2703#define PCI_VENDOR_ID_3COM_2 0xa727