aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/serial/8250_pci.c157
1 files changed, 18 insertions, 139 deletions
diff --git a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c
index 8f2617206e8f..c43de35a6c9d 100644
--- a/drivers/serial/8250_pci.c
+++ b/drivers/serial/8250_pci.c
@@ -393,6 +393,9 @@ static void __devexit sbs_exit(struct pci_dev *dev)
393 * - 10x cards have control registers in IO and/or memory space; 393 * - 10x cards have control registers in IO and/or memory space;
394 * - 20x cards have control registers in standard PCI configuration space. 394 * - 20x cards have control registers in standard PCI configuration space.
395 * 395 *
396 * Note: all 10x cards have PCI device ids 0x10..
397 * all 20x cards have PCI device ids 0x20..
398 *
396 * There are also Quartet Serial cards which use Oxford Semiconductor 399 * There are also Quartet Serial cards which use Oxford Semiconductor
397 * 16954 quad UART PCI chip clocked by 18.432 MHz quartz. 400 * 16954 quad UART PCI chip clocked by 18.432 MHz quartz.
398 * 401 *
@@ -449,6 +452,19 @@ static int pci_siig20x_init(struct pci_dev *dev)
449 return 0; 452 return 0;
450} 453}
451 454
455static int pci_siig_init(struct pci_dev *dev)
456{
457 unsigned int type = dev->device & 0xff00;
458
459 if (type == 0x1000)
460 return pci_siig10x_init(dev);
461 else if (type == 0x2000)
462 return pci_siig20x_init(dev);
463
464 moan_device("Unknown SIIG card", dev);
465 return -ENODEV;
466}
467
452int pci_siig10x_fn(struct pci_dev *dev, int enable) 468int pci_siig10x_fn(struct pci_dev *dev, int enable)
453{ 469{
454 int ret = 0; 470 int ret = 0;
@@ -759,152 +775,15 @@ static struct pci_serial_quirk pci_serial_quirks[] = {
759 .setup = sbs_setup, 775 .setup = sbs_setup,
760 .exit = __devexit_p(sbs_exit), 776 .exit = __devexit_p(sbs_exit),
761 }, 777 },
762
763 /* 778 /*
764 * SIIG cards. 779 * SIIG cards.
765 * It is not clear whether these could be collapsed.
766 */ 780 */
767 { 781 {
768 .vendor = PCI_VENDOR_ID_SIIG, 782 .vendor = PCI_VENDOR_ID_SIIG,
769 .device = PCI_DEVICE_ID_SIIG_1S_10x_550, 783 .device = PCI_ANY_ID,
770 .subvendor = PCI_ANY_ID,
771 .subdevice = PCI_ANY_ID,
772 .init = pci_siig10x_init,
773 .setup = pci_default_setup,
774 },
775 {
776 .vendor = PCI_VENDOR_ID_SIIG,
777 .device = PCI_DEVICE_ID_SIIG_1S_10x_650,
778 .subvendor = PCI_ANY_ID,
779 .subdevice = PCI_ANY_ID,
780 .init = pci_siig10x_init,
781 .setup = pci_default_setup,
782 },
783 {
784 .vendor = PCI_VENDOR_ID_SIIG,
785 .device = PCI_DEVICE_ID_SIIG_1S_10x_850,
786 .subvendor = PCI_ANY_ID,
787 .subdevice = PCI_ANY_ID,
788 .init = pci_siig10x_init,
789 .setup = pci_default_setup,
790 },
791 {
792 .vendor = PCI_VENDOR_ID_SIIG,
793 .device = PCI_DEVICE_ID_SIIG_2S_10x_550,
794 .subvendor = PCI_ANY_ID,
795 .subdevice = PCI_ANY_ID,
796 .init = pci_siig10x_init,
797 .setup = pci_default_setup,
798 },
799 {
800 .vendor = PCI_VENDOR_ID_SIIG,
801 .device = PCI_DEVICE_ID_SIIG_2S_10x_650,
802 .subvendor = PCI_ANY_ID,
803 .subdevice = PCI_ANY_ID,
804 .init = pci_siig10x_init,
805 .setup = pci_default_setup,
806 },
807 {
808 .vendor = PCI_VENDOR_ID_SIIG,
809 .device = PCI_DEVICE_ID_SIIG_2S_10x_850,
810 .subvendor = PCI_ANY_ID,
811 .subdevice = PCI_ANY_ID,
812 .init = pci_siig10x_init,
813 .setup = pci_default_setup,
814 },
815 {
816 .vendor = PCI_VENDOR_ID_SIIG,
817 .device = PCI_DEVICE_ID_SIIG_4S_10x_550,
818 .subvendor = PCI_ANY_ID,
819 .subdevice = PCI_ANY_ID,
820 .init = pci_siig10x_init,
821 .setup = pci_default_setup,
822 },
823 {
824 .vendor = PCI_VENDOR_ID_SIIG,
825 .device = PCI_DEVICE_ID_SIIG_4S_10x_650,
826 .subvendor = PCI_ANY_ID,
827 .subdevice = PCI_ANY_ID,
828 .init = pci_siig10x_init,
829 .setup = pci_default_setup,
830 },
831 {
832 .vendor = PCI_VENDOR_ID_SIIG,
833 .device = PCI_DEVICE_ID_SIIG_4S_10x_850,
834 .subvendor = PCI_ANY_ID,
835 .subdevice = PCI_ANY_ID,
836 .init = pci_siig10x_init,
837 .setup = pci_default_setup,
838 },
839 {
840 .vendor = PCI_VENDOR_ID_SIIG,
841 .device = PCI_DEVICE_ID_SIIG_1S_20x_550,
842 .subvendor = PCI_ANY_ID,
843 .subdevice = PCI_ANY_ID,
844 .init = pci_siig20x_init,
845 .setup = pci_default_setup,
846 },
847 {
848 .vendor = PCI_VENDOR_ID_SIIG,
849 .device = PCI_DEVICE_ID_SIIG_1S_20x_650,
850 .subvendor = PCI_ANY_ID,
851 .subdevice = PCI_ANY_ID,
852 .init = pci_siig20x_init,
853 .setup = pci_default_setup,
854 },
855 {
856 .vendor = PCI_VENDOR_ID_SIIG,
857 .device = PCI_DEVICE_ID_SIIG_1S_20x_850,
858 .subvendor = PCI_ANY_ID,
859 .subdevice = PCI_ANY_ID,
860 .init = pci_siig20x_init,
861 .setup = pci_default_setup,
862 },
863 {
864 .vendor = PCI_VENDOR_ID_SIIG,
865 .device = PCI_DEVICE_ID_SIIG_2S_20x_550,
866 .subvendor = PCI_ANY_ID,
867 .subdevice = PCI_ANY_ID,
868 .init = pci_siig20x_init,
869 .setup = pci_default_setup,
870 },
871 { .vendor = PCI_VENDOR_ID_SIIG,
872 .device = PCI_DEVICE_ID_SIIG_2S_20x_650,
873 .subvendor = PCI_ANY_ID,
874 .subdevice = PCI_ANY_ID,
875 .init = pci_siig20x_init,
876 .setup = pci_default_setup,
877 },
878 {
879 .vendor = PCI_VENDOR_ID_SIIG,
880 .device = PCI_DEVICE_ID_SIIG_2S_20x_850,
881 .subvendor = PCI_ANY_ID,
882 .subdevice = PCI_ANY_ID,
883 .init = pci_siig20x_init,
884 .setup = pci_default_setup,
885 },
886 {
887 .vendor = PCI_VENDOR_ID_SIIG,
888 .device = PCI_DEVICE_ID_SIIG_4S_20x_550,
889 .subvendor = PCI_ANY_ID,
890 .subdevice = PCI_ANY_ID,
891 .init = pci_siig20x_init,
892 .setup = pci_default_setup,
893 },
894 {
895 .vendor = PCI_VENDOR_ID_SIIG,
896 .device = PCI_DEVICE_ID_SIIG_4S_20x_650,
897 .subvendor = PCI_ANY_ID,
898 .subdevice = PCI_ANY_ID,
899 .init = pci_siig20x_init,
900 .setup = pci_default_setup,
901 },
902 {
903 .vendor = PCI_VENDOR_ID_SIIG,
904 .device = PCI_DEVICE_ID_SIIG_4S_20x_850,
905 .subvendor = PCI_ANY_ID, 784 .subvendor = PCI_ANY_ID,
906 .subdevice = PCI_ANY_ID, 785 .subdevice = PCI_ANY_ID,
907 .init = pci_siig20x_init, 786 .init = pci_siig_init,
908 .setup = pci_default_setup, 787 .setup = pci_default_setup,
909 }, 788 },
910 /* 789 /*