serial: exar: add CTI cards to exar_get_nr_ports

Add code for getting number of ports of CTI cards to
exar_get_nr_ports().

Signed-off-by: Parker Newman <pnewman@connecttech.com>
Link: https://lore.kernel.org/r/0c64bdf852f39aec966b38696695d951e485d7e6.1713382717.git.pnewman@connecttech.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Parker Newman 2024-04-17 16:31:27 -04:00 committed by Greg Kroah-Hartman
parent 209a20d4bd
commit 5aa84fd8d0

View File

@ -711,12 +711,28 @@ static unsigned int exar_get_nr_ports(struct exar8250_board *board,
{
unsigned int nr_ports = 0;
if (pcidev->vendor == PCI_VENDOR_ID_ACCESSIO)
if (pcidev->vendor == PCI_VENDOR_ID_ACCESSIO) {
nr_ports = BIT(((pcidev->device & 0x38) >> 3) - 1);
else if (board->num_ports)
} else if (board->num_ports > 0) {
// Check if board struct overrides number of ports
nr_ports = board->num_ports;
else
} else if (pcidev->vendor == PCI_VENDOR_ID_EXAR) {
// Exar encodes # ports in last nibble of PCI Device ID ex. 0358
nr_ports = pcidev->device & 0x0f;
} else if (pcidev->vendor == PCI_VENDOR_ID_CONNECT_TECH) {
// Handle CTI FPGA cards
switch (pcidev->device) {
case PCI_DEVICE_ID_CONNECT_TECH_PCI_XR79X_12_XIG00X:
case PCI_DEVICE_ID_CONNECT_TECH_PCI_XR79X_12_XIG01X:
nr_ports = 12;
break;
case PCI_DEVICE_ID_CONNECT_TECH_PCI_XR79X_16:
nr_ports = 16;
break;
default:
break;
}
}
return nr_ports;
}