serial: 8250_pci: Don't fail on multiport card class
Do not fail on multiport cards in serial_pci_is_class_communication().
It restores behaviour for SUNIX multiport cards, that enumerated by
class and have a custom board data.
Moreover it allows users to reenumerate port-by-port from user space.
Fixes: 7d8905d064
("serial: 8250_pci: Enable device after we check black list")
Reported-by: Nikola Ciprich <nikola.ciprich@linuxbox.cz>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Tested-by: Nikola Ciprich <nikola.ciprich@linuxbox.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
fd63a8903a
commit
e7f3e99cb1
|
@ -3387,11 +3387,9 @@ static int serial_pci_is_class_communication(struct pci_dev *dev)
|
|||
/*
|
||||
* If it is not a communications device or the programming
|
||||
* interface is greater than 6, give up.
|
||||
*
|
||||
* (Should we try to make guesses for multiport serial devices
|
||||
* later?)
|
||||
*/
|
||||
if ((((dev->class >> 8) != PCI_CLASS_COMMUNICATION_SERIAL) &&
|
||||
((dev->class >> 8) != PCI_CLASS_COMMUNICATION_MULTISERIAL) &&
|
||||
((dev->class >> 8) != PCI_CLASS_COMMUNICATION_MODEM)) ||
|
||||
(dev->class & 0xff) > 6)
|
||||
return -ENODEV;
|
||||
|
@ -3428,6 +3426,12 @@ serial_pci_guess_board(struct pci_dev *dev, struct pciserial_board *board)
|
|||
{
|
||||
int num_iomem, num_port, first_port = -1, i;
|
||||
|
||||
/*
|
||||
* Should we try to make guesses for multiport serial devices later?
|
||||
*/
|
||||
if ((dev->class >> 8) == PCI_CLASS_COMMUNICATION_MULTISERIAL)
|
||||
return -ENODEV;
|
||||
|
||||
num_iomem = num_port = 0;
|
||||
for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {
|
||||
if (pci_resource_flags(dev, i) & IORESOURCE_IO) {
|
||||
|
|
Loading…
Reference in New Issue