]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
serial/8250: Add suport for later SUNIX (TIMEDIA) boards.
authorStephen Chivers <schivers@shrike2a.aust.csc.com>
Mon, 28 Jan 2013 08:49:20 +0000 (19:49 +1100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 30 Jan 2013 05:08:22 +0000 (00:08 -0500)
Add support for later SUNIX (TIMEDIA) Universal PCI Single and Multi-Port
Communications Boards.

These boards have PCI Vendor ID 1fd4 with device ID 1999 but otherwise
appear to be the same as the TIMEDIA boards already supported by 8250_pci
and parport_serial.

Tested with:

a. the two port serial board part number SER5037A,
b. the two port serial and one port parallel board part number
   MIO5079A.

Signed-off-by: Stephen Chivers <schivers@csc.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/parport/parport_serial.c
drivers/tty/serial/8250/8250_pci.c

index ef6169adb845072fc73396a4d49a2ac45c472bfc..1b8bdb7e9bf40a6549c5739e6d8a50a732bc9cd9 100644 (file)
@@ -63,6 +63,7 @@ enum parport_pc_pci_cards {
        timedia_9079b,
        timedia_9079c,
        wch_ch353_2s1p,
+       sunix_2s1p,
 };
 
 /* each element directly indexed from enum list, above */
@@ -148,8 +149,12 @@ static struct parport_pc_pci cards[] = {
        /* timedia_9079b */             { 1, { { 2, 3 }, } },
        /* timedia_9079c */             { 1, { { 2, 3 }, } },
        /* wch_ch353_2s1p*/             { 1, { { 2, -1}, } },
+       /* sunix_2s1p */                { 1, { { 3, -1 }, } },
 };
 
+#define PCI_VENDOR_ID_SUNIX            0x1fd4
+#define PCI_DEVICE_ID_SUNIX_1999       0x1999
+
 static struct pci_device_id parport_serial_pci_tbl[] = {
        /* PCI cards */
        { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_110L,
@@ -246,8 +251,18 @@ static struct pci_device_id parport_serial_pci_tbl[] = {
        { 0x1409, 0x7168, 0x1409, 0xb079, 0, 0, timedia_9079a },
        { 0x1409, 0x7168, 0x1409, 0xc079, 0, 0, timedia_9079b },
        { 0x1409, 0x7168, 0x1409, 0xd079, 0, 0, timedia_9079c },
+
        /* WCH CARDS */
        { 0x4348, 0x7053, 0x4348, 0x3253, 0, 0, wch_ch353_2s1p},
+
+       /*
+        * More SUNIX variations. At least one of these has part number
+        * '5079A but subdevice 0x102. That board reports 0x0708 as
+        * its PCI Class.
+        */
+       { PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999, PCI_VENDOR_ID_SUNIX,
+         0x0102, 0, 0, sunix_2s1p },
+
        { 0, } /* terminate list */
 };
 MODULE_DEVICE_TABLE(pci,parport_serial_pci_tbl);
@@ -470,6 +485,12 @@ static struct pciserial_board pci_parport_serial_boards[] = {
                .base_baud      = 115200,
                .uart_offset    = 8,
        },
+       [sunix_2s1p] = {
+               .flags          = FL_BASE0|FL_BASE_BARS,
+               .num_ports      = 2,
+               .base_baud      = 921600,
+               .uart_offset    = 8,
+       },
 };
 
 struct parport_serial_private {
index 3cb333242912ae55dfca8e0f6cab49029386fe3d..791c5a77ec61d473495190049ab5776e8a02a846 100644 (file)
@@ -1565,6 +1565,9 @@ pci_wch_ch353_setup(struct serial_private *priv,
 #define PCI_DEVICE_ID_COMMTECH_4222PCIE        0x0022
 #define PCI_DEVICE_ID_BROADCOM_TRUMANAGE 0x160a
 
+#define PCI_VENDOR_ID_SUNIX            0x1fd4
+#define PCI_DEVICE_ID_SUNIX_1999       0x1999
+
 
 /* Unknown vendors/cards - this should not be in linux/pci_ids.h */
 #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584        0x1584
@@ -1960,6 +1963,23 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
                .subdevice      = PCI_ANY_ID,
                .setup          = pci_timedia_setup,
        },
+       /*
+        * SUNIX (Timedia) cards
+        * Do not "probe" for these cards as there is at least one combination
+        * card that should be handled by parport_pc that doesn't match the
+        * rule in pci_timedia_probe.
+        * It is part number is MIO5079A but its subdevice ID is 0x0102.
+        * There are some boards with part number SER5037AL that report
+        * subdevice ID 0x0002.
+        */
+       {
+               .vendor         = PCI_VENDOR_ID_SUNIX,
+               .device         = PCI_DEVICE_ID_SUNIX_1999,
+               .subvendor      = PCI_VENDOR_ID_SUNIX,
+               .subdevice      = PCI_ANY_ID,
+               .init           = pci_timedia_init,
+               .setup          = pci_timedia_setup,
+       },
        /*
         * Exar cards
         */
@@ -4210,6 +4230,19 @@ static struct pci_device_id serial_pci_tbl[] = {
                PCI_VENDOR_ID_TIMEDIA, PCI_ANY_ID, 0, 0,
                pbn_b0_bt_1_921600 },
 
+       /*
+        * SUNIX (TIMEDIA)
+        */
+       {       PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999,
+               PCI_VENDOR_ID_SUNIX, PCI_ANY_ID,
+               PCI_CLASS_COMMUNICATION_SERIAL << 8, 0xffff00,
+               pbn_b0_bt_1_921600 },
+
+       {       PCI_VENDOR_ID_SUNIX, PCI_DEVICE_ID_SUNIX_1999,
+               PCI_VENDOR_ID_SUNIX, PCI_ANY_ID,
+               PCI_CLASS_COMMUNICATION_MULTISERIAL << 8, 0xffff00,
+               pbn_b0_bt_1_921600 },
+
        /*
         * AFAVLAB serial card, from Harald Welte <laforge@gnumonks.org>
         */