Merge master.kernel.org:/pub/scm/linux/kernel/git/dtor/input
[pandora-kernel.git] / drivers / serial / 8250_pci.c
index de54bdc..07f05e9 100644 (file)
@@ -389,6 +389,9 @@ static void __devexit sbs_exit(struct pci_dev *dev)
  *     - 10x cards have control registers in IO and/or memory space;
  *     - 20x cards have control registers in standard PCI configuration space.
  *
+ * There are also Quartet Serial cards which use Oxford Semiconductor
+ * 16954 quad UART PCI chip clocked by 18.432 MHz quartz.
+ *
  * Note: some SIIG cards are probed by the parport_serial object.
  */
 
@@ -1026,6 +1029,10 @@ enum pci_board_num_t {
        pbn_b0_2_921600,
        pbn_b0_4_921600,
 
+       pbn_b0_2_1130000,
+
+       pbn_b0_4_1152000,
+
        pbn_b0_bt_1_115200,
        pbn_b0_bt_2_115200,
        pbn_b0_bt_8_115200,
@@ -1159,6 +1166,20 @@ static struct pci_board pci_boards[] __devinitdata = {
                .uart_offset    = 8,
        },
 
+       [pbn_b0_2_1130000] = {
+               .flags          = FL_BASE0,
+               .num_ports      = 2,
+               .base_baud      = 1130000,
+               .uart_offset    = 8,
+       },
+
+       [pbn_b0_4_1152000] = {
+               .flags          = FL_BASE0,
+               .num_ports      = 4,
+               .base_baud      = 1152000,
+               .uart_offset    = 8,
+       },
+
        [pbn_b0_bt_1_115200] = {
                .flags          = FL_BASE0|FL_BASE_BARS,
                .num_ports      = 1,
@@ -1755,33 +1776,30 @@ pciserial_init_one(struct pci_dev *dev, const struct pci_device_id *ent)
 static void __devexit pciserial_remove_one(struct pci_dev *dev)
 {
        struct serial_private *priv = pci_get_drvdata(dev);
+       struct pci_serial_quirk *quirk;
+       int i;
 
        pci_set_drvdata(dev, NULL);
 
-       if (priv) {
-               struct pci_serial_quirk *quirk;
-               int i;
-
-               for (i = 0; i < priv->nr; i++)
-                       serial8250_unregister_port(priv->line[i]);
+       for (i = 0; i < priv->nr; i++)
+               serial8250_unregister_port(priv->line[i]);
 
-               for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
-                       if (priv->remapped_bar[i])
-                               iounmap(priv->remapped_bar[i]);
-                       priv->remapped_bar[i] = NULL;
-               }
+       for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
+               if (priv->remapped_bar[i])
+                       iounmap(priv->remapped_bar[i]);
+               priv->remapped_bar[i] = NULL;
+       }
 
-               /*
-                * Find the exit quirks.
-                */
-               quirk = find_quirk(dev);
-               if (quirk->exit)
-                       quirk->exit(dev);
+       /*
+        * Find the exit quirks.
+        */
+       quirk = find_quirk(dev);
+       if (quirk->exit)
+               quirk->exit(dev);
 
-               pci_disable_device(dev);
+       pci_disable_device(dev);
 
-               kfree(priv);
-       }
+       kfree(priv);
 }
 
 static int pciserial_suspend_one(struct pci_dev *dev, pm_message_t state)
@@ -1977,6 +1995,19 @@ static struct pci_device_id serial_pci_tbl[] = {
        {       PCI_VENDOR_ID_SPECIALIX, PCI_DEVICE_ID_OXSEMI_16PCI954,
                PCI_VENDOR_ID_SPECIALIX, PCI_SUBDEVICE_ID_SPECIALIX_SPEED4, 0, 0,
                pbn_b0_4_921600 },
+       {       PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
+               PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_QUARTET_SERIAL, 0, 0,
+               pbn_b0_4_1152000 },
+
+               /*
+                * The below card is a little controversial since it is the
+                * subject of a PCI vendor/device ID clash.  (See
+                * www.ussg.iu.edu/hypermail/linux/kernel/0303.1/0516.html).
+                * For now just used the hex ID 0x950a.
+                */
+       {       PCI_VENDOR_ID_OXSEMI, 0x950a,
+               PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+               pbn_b0_2_1130000 },
        {       PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
                PCI_ANY_ID, PCI_ANY_ID, 0, 0,
                pbn_b0_4_115200 },