aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/serial/8250_pci.c
diff options
context:
space:
mode:
authorJeff Garzik <jgarzik@pobox.com>2005-07-30 18:14:15 -0400
committerJeff Garzik <jgarzik@pobox.com>2005-07-30 18:14:15 -0400
commita670fcb43f01a67ef56176afc76e5d43d128b25c (patch)
tree09c9411c78a33ff980e9ea871bc7686e7589abbf /drivers/serial/8250_pci.c
parent327309e899662b482c58cf25f574513d38b5788c (diff)
parentb0825488a642cadcf39709961dde61440cb0731c (diff)
/spare/repo/netdev-2.6 branch 'master'
Diffstat (limited to 'drivers/serial/8250_pci.c')
-rw-r--r--drivers/serial/8250_pci.c71
1 files changed, 51 insertions, 20 deletions
diff --git a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c
index de54bdc5398b..07f05e9d0955 100644
--- a/drivers/serial/8250_pci.c
+++ b/drivers/serial/8250_pci.c
@@ -389,6 +389,9 @@ static void __devexit sbs_exit(struct pci_dev *dev)
389 * - 10x cards have control registers in IO and/or memory space; 389 * - 10x cards have control registers in IO and/or memory space;
390 * - 20x cards have control registers in standard PCI configuration space. 390 * - 20x cards have control registers in standard PCI configuration space.
391 * 391 *
392 * There are also Quartet Serial cards which use Oxford Semiconductor
393 * 16954 quad UART PCI chip clocked by 18.432 MHz quartz.
394 *
392 * Note: some SIIG cards are probed by the parport_serial object. 395 * Note: some SIIG cards are probed by the parport_serial object.
393 */ 396 */
394 397
@@ -1026,6 +1029,10 @@ enum pci_board_num_t {
1026 pbn_b0_2_921600, 1029 pbn_b0_2_921600,
1027 pbn_b0_4_921600, 1030 pbn_b0_4_921600,
1028 1031
1032 pbn_b0_2_1130000,
1033
1034 pbn_b0_4_1152000,
1035
1029 pbn_b0_bt_1_115200, 1036 pbn_b0_bt_1_115200,
1030 pbn_b0_bt_2_115200, 1037 pbn_b0_bt_2_115200,
1031 pbn_b0_bt_8_115200, 1038 pbn_b0_bt_8_115200,
@@ -1159,6 +1166,20 @@ static struct pci_board pci_boards[] __devinitdata = {
1159 .uart_offset = 8, 1166 .uart_offset = 8,
1160 }, 1167 },
1161 1168
1169 [pbn_b0_2_1130000] = {
1170 .flags = FL_BASE0,
1171 .num_ports = 2,
1172 .base_baud = 1130000,
1173 .uart_offset = 8,
1174 },
1175
1176 [pbn_b0_4_1152000] = {
1177 .flags = FL_BASE0,
1178 .num_ports = 4,
1179 .base_baud = 1152000,
1180 .uart_offset = 8,
1181 },
1182
1162 [pbn_b0_bt_1_115200] = { 1183 [pbn_b0_bt_1_115200] = {
1163 .flags = FL_BASE0|FL_BASE_BARS, 1184 .flags = FL_BASE0|FL_BASE_BARS,
1164 .num_ports = 1, 1185 .num_ports = 1,
@@ -1755,33 +1776,30 @@ pciserial_init_one(struct pci_dev *dev, const struct pci_device_id *ent)
1755static void __devexit pciserial_remove_one(struct pci_dev *dev) 1776static void __devexit pciserial_remove_one(struct pci_dev *dev)
1756{ 1777{
1757 struct serial_private *priv = pci_get_drvdata(dev); 1778 struct serial_private *priv = pci_get_drvdata(dev);
1779 struct pci_serial_quirk *quirk;
1780 int i;
1758 1781
1759 pci_set_drvdata(dev, NULL); 1782 pci_set_drvdata(dev, NULL);
1760 1783
1761 if (priv) { 1784 for (i = 0; i < priv->nr; i++)
1762 struct pci_serial_quirk *quirk; 1785 serial8250_unregister_port(priv->line[i]);
1763 int i;
1764
1765 for (i = 0; i < priv->nr; i++)
1766 serial8250_unregister_port(priv->line[i]);
1767 1786
1768 for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) { 1787 for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
1769 if (priv->remapped_bar[i]) 1788 if (priv->remapped_bar[i])
1770 iounmap(priv->remapped_bar[i]); 1789 iounmap(priv->remapped_bar[i]);
1771 priv->remapped_bar[i] = NULL; 1790 priv->remapped_bar[i] = NULL;
1772 } 1791 }
1773 1792
1774 /* 1793 /*
1775 * Find the exit quirks. 1794 * Find the exit quirks.
1776 */ 1795 */
1777 quirk = find_quirk(dev); 1796 quirk = find_quirk(dev);
1778 if (quirk->exit) 1797 if (quirk->exit)
1779 quirk->exit(dev); 1798 quirk->exit(dev);
1780 1799
1781 pci_disable_device(dev); 1800 pci_disable_device(dev);
1782 1801
1783 kfree(priv); 1802 kfree(priv);
1784 }
1785} 1803}
1786 1804
1787static int pciserial_suspend_one(struct pci_dev *dev, pm_message_t state) 1805static int pciserial_suspend_one(struct pci_dev *dev, pm_message_t state)
@@ -1978,6 +1996,19 @@ static struct pci_device_id serial_pci_tbl[] = {
1978 PCI_VENDOR_ID_SPECIALIX, PCI_SUBDEVICE_ID_SPECIALIX_SPEED4, 0, 0, 1996 PCI_VENDOR_ID_SPECIALIX, PCI_SUBDEVICE_ID_SPECIALIX_SPEED4, 0, 0,
1979 pbn_b0_4_921600 }, 1997 pbn_b0_4_921600 },
1980 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954, 1998 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
1999 PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_QUARTET_SERIAL, 0, 0,
2000 pbn_b0_4_1152000 },
2001
2002 /*
2003 * The below card is a little controversial since it is the
2004 * subject of a PCI vendor/device ID clash. (See
2005 * www.ussg.iu.edu/hypermail/linux/kernel/0303.1/0516.html).
2006 * For now just used the hex ID 0x950a.
2007 */
2008 { PCI_VENDOR_ID_OXSEMI, 0x950a,
2009 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
2010 pbn_b0_2_1130000 },
2011 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
1981 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2012 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
1982 pbn_b0_4_115200 }, 2013 pbn_b0_4_115200 },
1983 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI952, 2014 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI952,