{ PCI_VDEVICE(COMMTECH, PCI_ANY_ID), },
 };
 
-/*
- * Given a complete unknown PCI device, try to use some heuristics to
- * guess what the configuration might be, based on the pitiful PCI
- * serial specs.  Returns 0 on success, 1 on failure.
- */
-static int
-serial_pci_guess_board(struct pci_dev *dev, struct pciserial_board *board)
+static int serial_pci_is_class_communication(struct pci_dev *dev)
 {
-       const struct pci_device_id *bldev;
-       int num_iomem, num_port, first_port = -1, i;
-
        /*
         * If it is not a communications device or the programming
         * interface is greater than 6, give up.
            (dev->class & 0xff) > 6)
                return -ENODEV;
 
+       return 0;
+}
+
+static int serial_pci_is_blacklisted(struct pci_dev *dev)
+{
+       const struct pci_device_id *bldev;
+
        /*
         * Do not access blacklisted devices that are known not to
         * feature serial ports or are handled by other modules.
                        return -ENODEV;
        }
 
+       return 0;
+}
+
+/*
+ * Given a complete unknown PCI device, try to use some heuristics to
+ * guess what the configuration might be, based on the pitiful PCI
+ * serial specs.  Returns 0 on success, -ENODEV on failure.
+ */
+static int
+serial_pci_guess_board(struct pci_dev *dev, struct pciserial_board *board)
+{
+       int num_iomem, num_port, first_port = -1, i;
+
        num_iomem = num_port = 0;
        for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
                if (pci_resource_flags(dev, i) & IORESOURCE_IO) {
 
        board = &pci_boards[ent->driver_data];
 
+       rc = serial_pci_is_class_communication(dev);
+       if (rc)
+               return rc;
+
+       rc = serial_pci_is_blacklisted(dev);
+       if (rc)
+               return rc;
+
        rc = pcim_enable_device(dev);
        pci_save_state(dev);
        if (rc)