diff options
-rw-r--r-- | drivers/serial/8250_pci.c | 157 |
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 | ||
455 | static 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 | |||
452 | int pci_siig10x_fn(struct pci_dev *dev, int enable) | 468 | int 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 | /* |