diff options
author | Jeff Garzik <jgarzik@pobox.com> | 2005-07-30 18:14:15 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-07-30 18:14:15 -0400 |
commit | a670fcb43f01a67ef56176afc76e5d43d128b25c (patch) | |
tree | 09c9411c78a33ff980e9ea871bc7686e7589abbf /drivers/serial/8250_pci.c | |
parent | 327309e899662b482c58cf25f574513d38b5788c (diff) | |
parent | b0825488a642cadcf39709961dde61440cb0731c (diff) |
/spare/repo/netdev-2.6 branch 'master'
Diffstat (limited to 'drivers/serial/8250_pci.c')
-rw-r--r-- | drivers/serial/8250_pci.c | 71 |
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) | |||
1755 | static void __devexit pciserial_remove_one(struct pci_dev *dev) | 1776 | static 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 | ||
1787 | static int pciserial_suspend_one(struct pci_dev *dev, pm_message_t state) | 1805 | static 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, |