|
@@ -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,8 @@ enum pci_board_num_t {
|
|
|
pbn_b0_2_921600,
|
|
|
pbn_b0_4_921600,
|
|
|
|
|
|
+ pbn_b0_4_1152000,
|
|
|
+
|
|
|
pbn_b0_bt_1_115200,
|
|
|
pbn_b0_bt_2_115200,
|
|
|
pbn_b0_bt_8_115200,
|
|
@@ -1158,6 +1163,12 @@ static struct pci_board pci_boards[] __devinitdata = {
|
|
|
.base_baud = 921600,
|
|
|
.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,
|
|
@@ -1755,33 +1766,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 +1985,9 @@ 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 },
|
|
|
{ PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
|
|
|
PCI_ANY_ID, PCI_ANY_ID, 0, 0,
|
|
|
pbn_b0_4_115200 },
|