Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2fdd8c8c authored by Sergej Pupykin's avatar Sergej Pupykin Committed by Greg Kroah-Hartman
Browse files

parport: Add support for the WCH382 2S/1P multi-IO card



WCH382 is a PCI-E card with 1 LPT and 2 DB9 COM ports detected as
Serial controller: Device 1c00:3250 (rev 10) (prog-if 05 [16850])

Signed-off-by: default avatarSergej Pupykin <ml@sergej.pp.ru>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent cab68f89
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@ enum parport_pc_pci_cards {
	timedia_9079c,
	wch_ch353_1s1p,
	wch_ch353_2s1p,
	wch_ch382_2s1p,
	sunix_2s1p,
};

@@ -151,6 +152,7 @@ static struct parport_pc_pci cards[] = {
	/* timedia_9079c */             { 1, { { 2, 3 }, } },
	/* wch_ch353_1s1p*/             { 1, { { 1, -1}, } },
	/* wch_ch353_2s1p*/             { 1, { { 2, -1}, } },
	/* wch_ch382_2s1p*/             { 1, { { 2, -1}, } },
	/* sunix_2s1p */                { 1, { { 3, -1 }, } },
};

@@ -257,6 +259,7 @@ static struct pci_device_id parport_serial_pci_tbl[] = {
	/* WCH CARDS */
	{ 0x4348, 0x5053, PCI_ANY_ID, PCI_ANY_ID, 0, 0, wch_ch353_1s1p},
	{ 0x4348, 0x7053, 0x4348, 0x3253, 0, 0, wch_ch353_2s1p},
	{ 0x1c00, 0x3250, 0x1c00, 0x3250, 0, 0, wch_ch382_2s1p},

	/*
	 * More SUNIX variations. At least one of these has part number
@@ -494,6 +497,13 @@ static struct pciserial_board pci_parport_serial_boards[] = {
		.base_baud      = 115200,
		.uart_offset    = 8,
	},
	[wch_ch382_2s1p] = {
		.flags          = FL_BASE0,
		.num_ports      = 2,
		.base_baud      = 115200,
		.uart_offset    = 8,
		.first_offset   = 0xC0,
	},
	[sunix_2s1p] = {
		.flags		= FL_BASE0|FL_BASE_BARS,
		.num_ports	= 2,
+21 −0
Original line number Diff line number Diff line
@@ -1783,6 +1783,16 @@ pci_wch_ch353_setup(struct serial_private *priv,
	return pci_default_setup(priv, board, port, idx);
}

static int
pci_wch_ch382_setup(struct serial_private *priv,
                    const struct pciserial_board *board,
                    struct uart_8250_port *port, int idx)
{
	port->port.flags |= UPF_FIXED_TYPE;
	port->port.type = PORT_16850;
	return pci_default_setup(priv, board, port, idx);
}

#define PCI_VENDOR_ID_SBSMODULARIO	0x124B
#define PCI_SUBVENDOR_ID_SBSMODULARIO	0x124B
#define PCI_DEVICE_ID_OCTPRO		0x0001
@@ -1837,6 +1847,8 @@ pci_wch_ch353_setup(struct serial_private *priv,
#define PCI_VENDOR_ID_SUNIX		0x1fd4
#define PCI_DEVICE_ID_SUNIX_1999	0x1999

#define PCIE_VENDOR_ID_WCH		0x1c00
#define PCIE_DEVICE_ID_WCH_CH382_2S1P	0x3250

/* Unknown vendors/cards - this should not be in linux/pci_ids.h */
#define PCI_SUBDEVICE_ID_UNKNOWN_0x1584	0x1584
@@ -2528,6 +2540,14 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
		.subdevice	= PCI_ANY_ID,
		.setup		= pci_wch_ch353_setup,
	},
	/* WCH CH382 2S1P card (16750 clone) */
	{
		.vendor         = PCIE_VENDOR_ID_WCH,
		.device         = PCIE_DEVICE_ID_WCH_CH382_2S1P,
		.subvendor      = PCI_ANY_ID,
		.subdevice      = PCI_ANY_ID,
		.setup          = pci_wch_ch382_setup,
	},
	/*
	 * ASIX devices with FIFO bug
	 */
@@ -3635,6 +3655,7 @@ static const struct pci_device_id blacklist[] = {
	/* multi-io cards handled by parport_serial */
	{ PCI_DEVICE(0x4348, 0x7053), }, /* WCH CH353 2S1P */
	{ PCI_DEVICE(0x4348, 0x5053), }, /* WCH CH353 1S1P */
	{ PCI_DEVICE(0x1c00, 0x3250), }, /* WCH CH382 2S1P */
};

/*