[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251130104222.63077-10-crescentcy.hsieh@moxa.com>
Date: Sun, 30 Nov 2025 18:42:00 +0800
From: Crescent Hsieh <crescentcy.hsieh@...a.com>
To: gregkh@...uxfoundation.org,
jirislaby@...nel.org,
ilpo.jarvinen@...ux.intel.com,
andy.shevchenko@...il.com
Cc: linux-kernel@...r.kernel.org,
linux-serial@...r.kernel.org,
crescentcy.hsieh@...a.com
Subject: [PATCH v1 09/31] serial: 8250: split 8250_mxpcie from 8250_pci
To avoid polluting 8250_pci, as suggested by Andy Shevchenko, this patch
separates 8250_mxpcie into its own module.
- https://lore.kernel.org/all/ZmQovC6TbDpTb3c8@surfacebook.localdomain/
Signed-off-by: Crescent Hsieh <crescentcy.hsieh@...a.com>
---
drivers/tty/serial/8250/8250_mxpcie.c | 277 ++++++++++++++++++++++++++
drivers/tty/serial/8250/8250_pci.c | 205 -------------------
drivers/tty/serial/8250/Kconfig | 11 +
drivers/tty/serial/8250/Makefile | 1 +
4 files changed, 289 insertions(+), 205 deletions(-)
create mode 100644 drivers/tty/serial/8250/8250_mxpcie.c
diff --git a/drivers/tty/serial/8250/8250_mxpcie.c b/drivers/tty/serial/8250/8250_mxpcie.c
new file mode 100644
index 000000000000..2e26307a9fee
--- /dev/null
+++ b/drivers/tty/serial/8250/8250_mxpcie.c
@@ -0,0 +1,277 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * 8250_mxpcie.c - Moxa PCIe multiport serial device driver
+ *
+ * Copyright (C) 2025 Moxa Inc. (support@...a.com)
+ * Author: Crescent Hsieh <crescentcy.hsieh@...a.com>
+ */
+
+#include <linux/module.h>
+#include <linux/pci.h>
+#include <linux/8250_pci.h>
+
+#include "8250.h"
+#include "8250_pcilib.h"
+
+#define PCI_DEVICE_ID_MOXA_CP102E 0x1024
+#define PCI_DEVICE_ID_MOXA_CP102EL 0x1025
+#define PCI_DEVICE_ID_MOXA_CP102N 0x1027
+#define PCI_DEVICE_ID_MOXA_CP104EL_A 0x1045
+#define PCI_DEVICE_ID_MOXA_CP104N 0x1046
+#define PCI_DEVICE_ID_MOXA_CP112N 0x1121
+#define PCI_DEVICE_ID_MOXA_CP114EL 0x1144
+#define PCI_DEVICE_ID_MOXA_CP114N 0x1145
+#define PCI_DEVICE_ID_MOXA_CP116E_A_A 0x1160
+#define PCI_DEVICE_ID_MOXA_CP116E_A_B 0x1161
+#define PCI_DEVICE_ID_MOXA_CP118EL_A 0x1182
+#define PCI_DEVICE_ID_MOXA_CP118E_A_I 0x1183
+#define PCI_DEVICE_ID_MOXA_CP132EL 0x1322
+#define PCI_DEVICE_ID_MOXA_CP132N 0x1323
+#define PCI_DEVICE_ID_MOXA_CP134EL_A 0x1342
+#define PCI_DEVICE_ID_MOXA_CP134N 0x1343
+#define PCI_DEVICE_ID_MOXA_CP138E_A 0x1381
+#define PCI_DEVICE_ID_MOXA_CP168EL_A 0x1683
+
+/* UART */
+#define MOXA_PUART_BASE_BAUD 921600
+#define MOXA_PUART_OFFSET 0x200
+
+#define MOXA_GPIO_DIRECTION 0x09
+#define MOXA_GPIO_OUTPUT 0x0A
+
+#define MOXA_GPIO_PIN2 BIT(2)
+
+#define MOXA_UIR_OFFSET 0x04
+#define MOXA_UIR_RS232 0x00
+#define MOXA_UIR_RS422 0x01
+#define MOXA_UIR_RS485_4W 0x0B
+#define MOXA_UIR_RS485_2W 0x0F
+
+#define MOXA_EVEN_RS_MASK GENMASK(3, 0)
+#define MOXA_ODD_RS_MASK GENMASK(7, 4)
+
+struct mxpcie8250 {
+ struct pci_dev *pdev;
+ unsigned int supp_rs;
+ unsigned int num_ports;
+ int line[];
+};
+
+enum {
+ MOXA_SUPP_RS232 = BIT(0),
+ MOXA_SUPP_RS422 = BIT(1),
+ MOXA_SUPP_RS485 = BIT(2),
+};
+
+static bool mxpcie8250_is_mini_pcie(unsigned short device)
+{
+ if (device == PCI_DEVICE_ID_MOXA_CP102N ||
+ device == PCI_DEVICE_ID_MOXA_CP104N ||
+ device == PCI_DEVICE_ID_MOXA_CP112N ||
+ device == PCI_DEVICE_ID_MOXA_CP114N ||
+ device == PCI_DEVICE_ID_MOXA_CP132N ||
+ device == PCI_DEVICE_ID_MOXA_CP134N)
+ return true;
+
+ return false;
+}
+
+static unsigned int mxpcie8250_get_supp_rs(unsigned short device)
+{
+ switch (device & 0x0F00) {
+ case 0x0000:
+ case 0x0600:
+ return MOXA_SUPP_RS232;
+ case 0x0100:
+ return MOXA_SUPP_RS232 | MOXA_SUPP_RS422 | MOXA_SUPP_RS485;
+ case 0x0300:
+ return MOXA_SUPP_RS422 | MOXA_SUPP_RS485;
+ }
+
+ return 0;
+}
+
+static unsigned short mxpcie8250_get_nports(unsigned short device)
+{
+ switch (device) {
+ case PCI_DEVICE_ID_MOXA_CP116E_A_A:
+ case PCI_DEVICE_ID_MOXA_CP116E_A_B:
+ return 8;
+ }
+
+ return FIELD_GET(0x00F0, device);
+}
+
+static int mxpcie8250_set_interface(struct mxpcie8250 *priv,
+ unsigned int port_idx,
+ u8 mode)
+{
+ resource_size_t iobar_addr = pci_resource_start(priv->pdev, 2);
+ resource_size_t UIR_addr = iobar_addr + MOXA_UIR_OFFSET + port_idx / 2;
+ u8 cval;
+
+ cval = inb(UIR_addr);
+
+ if (port_idx % 2) {
+ cval &= ~MOXA_ODD_RS_MASK;
+ cval |= FIELD_PREP(MOXA_ODD_RS_MASK, mode);
+ } else {
+ cval &= ~MOXA_EVEN_RS_MASK;
+ cval |= FIELD_PREP(MOXA_EVEN_RS_MASK, mode);
+ }
+ outb(cval, UIR_addr);
+
+ return 0;
+}
+
+static int mxpcie8250_init(struct pci_dev *pdev)
+{
+ resource_size_t iobar_addr = pci_resource_start(pdev, 2);
+ u8 cval;
+
+ /* Initial terminator */
+ if (pdev->device == PCI_DEVICE_ID_MOXA_CP114EL ||
+ pdev->device == PCI_DEVICE_ID_MOXA_CP118EL_A) {
+ outb(0xff, iobar_addr + MOXA_GPIO_DIRECTION);
+ outb(0x00, iobar_addr + MOXA_GPIO_OUTPUT);
+ }
+ /*
+ * Enable hardware buffer to prevent break signal output when system boots up.
+ * This hardware buffer is only supported on Mini PCIe series.
+ */
+ if (mxpcie8250_is_mini_pcie(pdev->device)) {
+ /* Set GPIO direction */
+ cval = inb(iobar_addr + MOXA_GPIO_DIRECTION);
+ cval |= MOXA_GPIO_PIN2;
+ outb(cval, iobar_addr + MOXA_GPIO_DIRECTION);
+ /* Enable low GPIO */
+ cval = inb(iobar_addr + MOXA_GPIO_OUTPUT);
+ cval &= ~MOXA_GPIO_PIN2;
+ outb(cval, iobar_addr + MOXA_GPIO_OUTPUT);
+ }
+
+ return 0;
+}
+
+static int mxpcie8250_setup(struct pci_dev *pdev,
+ struct mxpcie8250 *priv,
+ struct uart_8250_port *up,
+ int idx)
+{
+ unsigned int bar = FL_GET_BASE(FL_BASE1);
+ int offset = idx * MOXA_PUART_OFFSET;
+ u8 init_mode = MOXA_UIR_RS232;
+
+ if (!(priv->supp_rs & MOXA_SUPP_RS232))
+ init_mode = MOXA_UIR_RS422;
+
+ mxpcie8250_set_interface(priv, idx, init_mode);
+
+ if (idx == 3 &&
+ (pdev->device == PCI_DEVICE_ID_MOXA_CP104EL_A ||
+ pdev->device == PCI_DEVICE_ID_MOXA_CP114EL ||
+ pdev->device == PCI_DEVICE_ID_MOXA_CP134EL_A))
+ offset = 7 * MOXA_PUART_OFFSET;
+
+ return serial8250_pci_setup_port(pdev, up, bar, offset, 0);
+}
+
+static int mxpcie8250_probe(struct pci_dev *pdev, const struct pci_device_id *id)
+{
+ struct uart_8250_port up;
+ struct mxpcie8250 *priv;
+ unsigned int i, num_ports;
+ int ret;
+
+ ret = pcim_enable_device(pdev);
+ pci_save_state(pdev);
+
+ if (ret)
+ return ret;
+
+ num_ports = mxpcie8250_get_nports(pdev->device);
+
+ priv = devm_kzalloc(&pdev->dev, struct_size(priv, line, num_ports), GFP_KERNEL);
+
+ if (!priv)
+ return -ENOMEM;
+
+ priv->supp_rs = mxpcie8250_get_supp_rs(pdev->device);
+ priv->num_ports = num_ports;
+
+ mxpcie8250_init(pdev);
+ priv->pdev = pdev;
+
+ memset(&up, 0, sizeof(up));
+
+ up.port.dev = &pdev->dev;
+ up.port.irq = pdev->irq;
+ up.port.uartclk = MOXA_PUART_BASE_BAUD * 16;
+ up.port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ;
+
+ for (i = 0; i < num_ports; i++) {
+ if (mxpcie8250_setup(pdev, priv, &up, i))
+ break;
+
+ dev_dbg(&pdev->dev, "Setup PCI port: port %lx, irq %d, type %d\n",
+ up.port.iobase, up.port.irq, up.port.iotype);
+
+ priv->line[i] = serial8250_register_8250_port(&up);
+
+ if (priv->line[i] < 0) {
+ dev_err(&pdev->dev,
+ "Couldn't register serial port %lx, irq %d, type %d, error %d\n",
+ up.port.iobase, up.port.irq,
+ up.port.iotype, priv->line[i]);
+ break;
+ }
+ }
+ pci_set_drvdata(pdev, priv);
+
+ return 0;
+}
+
+static void mxpcie8250_remove(struct pci_dev *pdev)
+{
+ struct mxpcie8250 *priv = pci_get_drvdata(pdev);
+ unsigned int i;
+
+ for (i = 0; i < priv->num_ports; i++)
+ serial8250_unregister_port(priv->line[i]);
+}
+
+static const struct pci_device_id mxpcie8250_pci_ids[] = {
+ { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102E) },
+ { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102EL) },
+ { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102N) },
+ { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP104EL_A) },
+ { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP104N) },
+ { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP112N) },
+ { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP114EL) },
+ { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP114N) },
+ { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP116E_A_A) },
+ { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP116E_A_B) },
+ { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP118EL_A) },
+ { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP118E_A_I) },
+ { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP132EL) },
+ { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP132N) },
+ { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP134EL_A) },
+ { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP134N) },
+ { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP138E_A) },
+ { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP168EL_A) },
+ { }
+};
+
+static struct pci_driver mxpcie8250_pci_driver = {
+ .name = "8250_mxpcie",
+ .id_table = mxpcie8250_pci_ids,
+ .probe = mxpcie8250_probe,
+ .remove = mxpcie8250_remove,
+};
+
+module_pci_driver(mxpcie8250_pci_driver);
+MODULE_AUTHOR("Moxa Inc.");
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("Moxa PCIe Multiport Serial Device Driver");
+MODULE_DEVICE_TABLE(pci, mxpcie8250_pci_ids);
+MODULE_IMPORT_NS("SERIAL_8250_PCI");
diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
index 3c3f7c926afb..7327a370318e 100644
--- a/drivers/tty/serial/8250/8250_pci.c
+++ b/drivers/tty/serial/8250/8250_pci.c
@@ -82,25 +82,6 @@
#define PCIE_DEVICE_ID_WCH_CH384_8S 0x3853
#define PCIE_DEVICE_ID_WCH_CH382_2S 0x3253
-#define PCI_DEVICE_ID_MOXA_CP102E 0x1024
-#define PCI_DEVICE_ID_MOXA_CP102EL 0x1025
-#define PCI_DEVICE_ID_MOXA_CP102N 0x1027
-#define PCI_DEVICE_ID_MOXA_CP104EL_A 0x1045
-#define PCI_DEVICE_ID_MOXA_CP104N 0x1046
-#define PCI_DEVICE_ID_MOXA_CP112N 0x1121
-#define PCI_DEVICE_ID_MOXA_CP114EL 0x1144
-#define PCI_DEVICE_ID_MOXA_CP114N 0x1145
-#define PCI_DEVICE_ID_MOXA_CP116E_A_A 0x1160
-#define PCI_DEVICE_ID_MOXA_CP116E_A_B 0x1161
-#define PCI_DEVICE_ID_MOXA_CP118EL_A 0x1182
-#define PCI_DEVICE_ID_MOXA_CP118E_A_I 0x1183
-#define PCI_DEVICE_ID_MOXA_CP132EL 0x1322
-#define PCI_DEVICE_ID_MOXA_CP132N 0x1323
-#define PCI_DEVICE_ID_MOXA_CP134EL_A 0x1342
-#define PCI_DEVICE_ID_MOXA_CP134N 0x1343
-#define PCI_DEVICE_ID_MOXA_CP138E_A 0x1381
-#define PCI_DEVICE_ID_MOXA_CP168EL_A 0x1683
-
/* Unknown vendors/cards - this should not be in linux/pci_ids.h */
#define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584
#define PCI_SUBDEVICE_ID_UNKNOWN_0x1588 0x1588
@@ -2000,138 +1981,6 @@ pci_sunix_setup(struct serial_private *priv,
return setup_port(priv, port, bar, offset, 0);
}
-#define MOXA_PUART_GPIO_EN 0x09
-#define MOXA_PUART_GPIO_OUT 0x0A
-
-#define MOXA_GPIO_PIN2 BIT(2)
-
-#define MOXA_RS232 0x00
-#define MOXA_RS422 0x01
-#define MOXA_RS485_4W 0x0B
-#define MOXA_RS485_2W 0x0F
-#define MOXA_UIR_OFFSET 0x04
-#define MOXA_EVEN_RS_MASK GENMASK(3, 0)
-#define MOXA_ODD_RS_MASK GENMASK(7, 4)
-
-enum {
- MOXA_SUPP_RS232 = BIT(0),
- MOXA_SUPP_RS422 = BIT(1),
- MOXA_SUPP_RS485 = BIT(2),
-};
-
-static unsigned short moxa_get_nports(unsigned short device)
-{
- switch (device) {
- case PCI_DEVICE_ID_MOXA_CP116E_A_A:
- case PCI_DEVICE_ID_MOXA_CP116E_A_B:
- return 8;
- }
-
- return FIELD_GET(0x00F0, device);
-}
-
-static bool pci_moxa_is_mini_pcie(unsigned short device)
-{
- if (device == PCI_DEVICE_ID_MOXA_CP102N ||
- device == PCI_DEVICE_ID_MOXA_CP104N ||
- device == PCI_DEVICE_ID_MOXA_CP112N ||
- device == PCI_DEVICE_ID_MOXA_CP114N ||
- device == PCI_DEVICE_ID_MOXA_CP132N ||
- device == PCI_DEVICE_ID_MOXA_CP134N)
- return true;
-
- return false;
-}
-
-static unsigned int pci_moxa_supported_rs(struct pci_dev *dev)
-{
- switch (dev->device & 0x0F00) {
- case 0x0000:
- case 0x0600:
- return MOXA_SUPP_RS232;
- case 0x0100:
- return MOXA_SUPP_RS232 | MOXA_SUPP_RS422 | MOXA_SUPP_RS485;
- case 0x0300:
- return MOXA_SUPP_RS422 | MOXA_SUPP_RS485;
- }
- return 0;
-}
-
-static int pci_moxa_set_interface(const struct pci_dev *dev,
- unsigned int port_idx,
- u8 mode)
-{
- resource_size_t iobar_addr = pci_resource_start(dev, 2);
- resource_size_t UIR_addr = iobar_addr + MOXA_UIR_OFFSET + port_idx / 2;
- u8 val;
-
- val = inb(UIR_addr);
-
- if (port_idx % 2) {
- val &= ~MOXA_ODD_RS_MASK;
- val |= FIELD_PREP(MOXA_ODD_RS_MASK, mode);
- } else {
- val &= ~MOXA_EVEN_RS_MASK;
- val |= FIELD_PREP(MOXA_EVEN_RS_MASK, mode);
- }
- outb(val, UIR_addr);
-
- return 0;
-}
-
-static int pci_moxa_init(struct pci_dev *dev)
-{
- unsigned short device = dev->device;
- resource_size_t iobar_addr = pci_resource_start(dev, 2);
- unsigned int i, num_ports = moxa_get_nports(device);
- u8 val, init_mode = MOXA_RS232;
-
- if (!IS_ENABLED(CONFIG_HAS_IOPORT))
- return serial_8250_warn_need_ioport(dev);
-
- if (!(pci_moxa_supported_rs(dev) & MOXA_SUPP_RS232)) {
- init_mode = MOXA_RS422;
- }
- for (i = 0; i < num_ports; ++i)
- pci_moxa_set_interface(dev, i, init_mode);
-
- /*
- * Enable hardware buffer to prevent break signal output when system boots up.
- * This hardware buffer is only supported on Mini PCIe series.
- */
- if (pci_moxa_is_mini_pcie(device)) {
- /* Set GPIO direction */
- val = inb(iobar_addr + MOXA_PUART_GPIO_EN);
- val |= MOXA_GPIO_PIN2;
- outb(val, iobar_addr + MOXA_PUART_GPIO_EN);
- /* Enable low GPIO */
- val = inb(iobar_addr + MOXA_PUART_GPIO_OUT);
- val &= ~MOXA_GPIO_PIN2;
- outb(val, iobar_addr + MOXA_PUART_GPIO_OUT);
- }
-
- return num_ports;
-}
-
-static int
-pci_moxa_setup(struct serial_private *priv,
- const struct pciserial_board *board,
- struct uart_8250_port *port, int idx)
-{
- unsigned int bar = FL_GET_BASE(board->flags);
- int offset;
-
- if (!IS_ENABLED(CONFIG_HAS_IOPORT))
- return serial_8250_warn_need_ioport(priv->dev);
-
- if (board->num_ports == 4 && idx == 3)
- offset = 7 * board->uart_offset;
- else
- offset = idx * board->uart_offset;
-
- return setup_port(priv, port, bar, offset, 0);
-}
-
/*
* Master list of serial port init/setup/exit quirks.
* This does not describe the general nature of the port.
@@ -2931,17 +2780,6 @@ static struct pci_serial_quirk pci_serial_quirks[] = {
.setup = pci_fintek_setup,
.init = pci_fintek_init,
},
- /*
- * MOXA
- */
- {
- .vendor = PCI_VENDOR_ID_MOXA,
- .device = PCI_ANY_ID,
- .subvendor = PCI_ANY_ID,
- .subdevice = PCI_ANY_ID,
- .init = pci_moxa_init,
- .setup = pci_moxa_setup,
- },
{
.vendor = 0x1c29,
.device = 0x1204,
@@ -3159,9 +2997,6 @@ enum pci_board_num_t {
pbn_titan_2_4000000,
pbn_titan_4_4000000,
pbn_titan_8_4000000,
- pbn_moxa_2,
- pbn_moxa_4,
- pbn_moxa_8,
};
/*
@@ -3933,24 +3768,6 @@ static struct pciserial_board pci_boards[] = {
.uart_offset = 0x200,
.first_offset = 0x1000,
},
- [pbn_moxa_2] = {
- .flags = FL_BASE1,
- .num_ports = 2,
- .base_baud = 921600,
- .uart_offset = 0x200,
- },
- [pbn_moxa_4] = {
- .flags = FL_BASE1,
- .num_ports = 4,
- .base_baud = 921600,
- .uart_offset = 0x200,
- },
- [pbn_moxa_8] = {
- .flags = FL_BASE1,
- .num_ports = 8,
- .base_baud = 921600,
- .uart_offset = 0x200,
- },
};
#define REPORT_CONFIG(option) \
@@ -5811,28 +5628,6 @@ static const struct pci_device_id serial_pci_tbl[] = {
PCI_ANY_ID, PCI_ANY_ID, 0, 0,
pbn_ni8430_4 },
- /*
- * MOXA
- */
- { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102E), pbn_moxa_2 },
- { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102EL), pbn_moxa_2 },
- { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102N), pbn_moxa_2 },
- { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP104EL_A), pbn_moxa_4 },
- { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP104N), pbn_moxa_4 },
- { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP112N), pbn_moxa_2 },
- { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP114EL), pbn_moxa_4 },
- { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP114N), pbn_moxa_4 },
- { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP116E_A_A), pbn_moxa_8 },
- { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP116E_A_B), pbn_moxa_8 },
- { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP118EL_A), pbn_moxa_8 },
- { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP118E_A_I), pbn_moxa_8 },
- { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP132EL), pbn_moxa_2 },
- { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP132N), pbn_moxa_2 },
- { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP134EL_A), pbn_moxa_4 },
- { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP134N), pbn_moxa_4 },
- { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP138E_A), pbn_moxa_8 },
- { PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP168EL_A), pbn_moxa_8 },
-
/*
* ADDI-DATA GmbH communication cards <info@...i-data.com>
*/
diff --git a/drivers/tty/serial/8250/Kconfig b/drivers/tty/serial/8250/Kconfig
index e8b2878f8ab0..0db3ea0fd1d1 100644
--- a/drivers/tty/serial/8250/Kconfig
+++ b/drivers/tty/serial/8250/Kconfig
@@ -157,6 +157,17 @@ config SERIAL_8250_EXAR
422x PCIe serial cards that are not covered by the more generic
SERIAL_8250_PCI option.
+config SERIAL_8250_MOXA_PCIE
+ tristate "8250/16550 Moxa PCIe device support"
+ depends on SERIAL_8250 && PCI
+ select SERIAL_8250_PCILIB
+ default SERIAL_8250
+ help
+ Say Y here if you have a Moxa PCIe serial card.
+
+ To compile this driver as a module, choose M here: the
+ module will be called 8250_mxpcie.
+
config SERIAL_8250_MOXA_UPCI
tristate "8250/16550 Moxa UPCI device support"
depends on SERIAL_8250 && PCI
diff --git a/drivers/tty/serial/8250/Makefile b/drivers/tty/serial/8250/Makefile
index da9d35911bd5..cf871a3a1fb7 100644
--- a/drivers/tty/serial/8250/Makefile
+++ b/drivers/tty/serial/8250/Makefile
@@ -39,6 +39,7 @@ obj-$(CONFIG_SERIAL_8250_LPC18XX) += 8250_lpc18xx.o
obj-$(CONFIG_SERIAL_8250_LPSS) += 8250_lpss.o
obj-$(CONFIG_SERIAL_8250_MEN_MCB) += 8250_men_mcb.o
obj-$(CONFIG_SERIAL_8250_MID) += 8250_mid.o
+obj-$(CONFIG_SERIAL_8250_MOXA_PCIE) += 8250_mxpcie.o
obj-$(CONFIG_SERIAL_8250_MOXA_UPCI) += 8250_mxupci.o
obj-$(CONFIG_SERIAL_8250_MT6577) += 8250_mtk.o
obj-$(CONFIG_SERIAL_OF_PLATFORM) += 8250_of.o
--
2.45.2
Powered by blists - more mailing lists