* [PATCH] parport: Add support for the WCH353 1S/1P multi-IO card
@ 2014-05-24 18:24 Ezequiel Garcia
2014-05-24 18:36 ` Ezequiel Garcia
0 siblings, 1 reply; 2+ messages in thread
From: Ezequiel Garcia @ 2014-05-24 18:24 UTC (permalink / raw)
To: linux-kernel
Cc: Ezequiel Garcia, Gianluca Anzolin, Alan Cox, Greg Kroah-Hartman
This Multi-IO card has one serial 16550-like and one parallel port connector.
Here's the lspci output, after this commit is applied:
03:07.0 Serial controller: Device 4348:5053 (rev 10) (prog-if 02 [16550])
Subsystem: Device 4348:5053
Control: I/O+ Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 21
Region 0: I/O ports at cf00 [size=8]
Region 1: I/O ports at ce00 [size=8]
Kernel driver in use: parport_serial
Kernel modules: 8250_pci, parport_serial
This commit adds an entry with the device ID to the blacklist declared in
8250_pci to prevent the driver from taking ownership. Also, and as was done
for the 2S/1P variant, add a quirk to skip autodetection and set the correct
type to 16550A clone.
Proper entries are added to parport_serial, to support the device parallel
and serial ports.
Cc: Gianluca Anzolin <gianluca@sottospazio.it>
Cc: Alan Cox <alan@linux.intel.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
drivers/parport/parport_serial.c | 9 +++++++++
drivers/tty/serial/8250/8250_pci.c | 10 ++++++++++
2 files changed, 19 insertions(+)
diff --git a/drivers/parport/parport_serial.c b/drivers/parport/parport_serial.c
index ff53314..ee93200 100644
--- a/drivers/parport/parport_serial.c
+++ b/drivers/parport/parport_serial.c
@@ -62,6 +62,7 @@ enum parport_pc_pci_cards {
timedia_9079a,
timedia_9079b,
timedia_9079c,
+ wch_ch353_1s1p,
wch_ch353_2s1p,
sunix_2s1p,
};
@@ -148,6 +149,7 @@ static struct parport_pc_pci cards[] = {
/* timedia_9079a */ { 1, { { 2, 3 }, } },
/* timedia_9079b */ { 1, { { 2, 3 }, } },
/* timedia_9079c */ { 1, { { 2, 3 }, } },
+ /* wch_ch353_1s1p*/ { 1, { { 1, -1}, } },
/* wch_ch353_2s1p*/ { 1, { { 2, -1}, } },
/* sunix_2s1p */ { 1, { { 3, -1 }, } },
};
@@ -253,6 +255,7 @@ static struct pci_device_id parport_serial_pci_tbl[] = {
{ 0x1409, 0x7168, 0x1409, 0xd079, 0, 0, timedia_9079c },
/* WCH CARDS */
+ { 0x4348, 0x5053, PCI_ANY_ID, PCI_ANY_ID, 0, 0, wch_ch353_1s1p},
{ 0x4348, 0x7053, 0x4348, 0x3253, 0, 0, wch_ch353_2s1p},
/*
@@ -479,6 +482,12 @@ static struct pciserial_board pci_parport_serial_boards[] = {
.base_baud = 921600,
.uart_offset = 8,
},
+ [wch_ch353_1s1p] = {
+ .flags = FL_BASE0|FL_BASE_BARS,
+ .num_ports = 1,
+ .base_baud = 115200,
+ .uart_offset = 8,
+ },
[wch_ch353_2s1p] = {
.flags = FL_BASE0|FL_BASE_BARS,
.num_ports = 2,
diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
index b14bcba..f35a85f 100644
--- a/drivers/tty/serial/8250/8250_pci.c
+++ b/drivers/tty/serial/8250/8250_pci.c
@@ -1778,6 +1778,7 @@ pci_wch_ch353_setup(struct serial_private *priv,
#define PCI_DEVICE_ID_WCH_CH352_2S 0x3253
#define PCI_DEVICE_ID_WCH_CH353_4S 0x3453
#define PCI_DEVICE_ID_WCH_CH353_2S1PF 0x5046
+#define PCI_DEVICE_ID_WCH_CH353_1S1P 0x5053
#define PCI_DEVICE_ID_WCH_CH353_2S1P 0x7053
#define PCI_VENDOR_ID_AGESTAR 0x5372
#define PCI_DEVICE_ID_AGESTAR_9375 0x6872
@@ -2410,6 +2411,14 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
.subdevice = PCI_ANY_ID,
.setup = pci_omegapci_setup,
},
+ /* WCH CH353 1S1P card (16550 clone) */
+ {
+ .vendor = PCI_VENDOR_ID_WCH,
+ .device = PCI_DEVICE_ID_WCH_CH353_1S1P,
+ .subvendor = PCI_ANY_ID,
+ .subdevice = PCI_ANY_ID,
+ .setup = pci_wch_ch353_setup,
+ },
/* WCH CH353 2S1P card (16550 clone) */
{
.vendor = PCI_VENDOR_ID_WCH,
@@ -3526,6 +3535,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 */
};
/*
--
1.9.1
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: [PATCH] parport: Add support for the WCH353 1S/1P multi-IO card
2014-05-24 18:24 [PATCH] parport: Add support for the WCH353 1S/1P multi-IO card Ezequiel Garcia
@ 2014-05-24 18:36 ` Ezequiel Garcia
0 siblings, 0 replies; 2+ messages in thread
From: Ezequiel Garcia @ 2014-05-24 18:36 UTC (permalink / raw)
To: linux-serial, linux-kernel; +Cc: Gianluca Anzolin, Alan Cox, Greg Kroah-Hartman
(Ccing linux-serial)
On 24 May 03:24 PM, Ezequiel Garcia wrote:
> This Multi-IO card has one serial 16550-like and one parallel port connector.
> Here's the lspci output, after this commit is applied:
>
> 03:07.0 Serial controller: Device 4348:5053 (rev 10) (prog-if 02 [16550])
> Subsystem: Device 4348:5053
> Control: I/O+ Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
> Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
> Interrupt: pin A routed to IRQ 21
> Region 0: I/O ports at cf00 [size=8]
> Region 1: I/O ports at ce00 [size=8]
> Kernel driver in use: parport_serial
> Kernel modules: 8250_pci, parport_serial
>
> This commit adds an entry with the device ID to the blacklist declared in
> 8250_pci to prevent the driver from taking ownership. Also, and as was done
> for the 2S/1P variant, add a quirk to skip autodetection and set the correct
> type to 16550A clone.
>
> Proper entries are added to parport_serial, to support the device parallel
> and serial ports.
>
> Cc: Gianluca Anzolin <gianluca@sottospazio.it>
> Cc: Alan Cox <alan@linux.intel.com>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
> ---
> drivers/parport/parport_serial.c | 9 +++++++++
> drivers/tty/serial/8250/8250_pci.c | 10 ++++++++++
> 2 files changed, 19 insertions(+)
>
> diff --git a/drivers/parport/parport_serial.c b/drivers/parport/parport_serial.c
> index ff53314..ee93200 100644
> --- a/drivers/parport/parport_serial.c
> +++ b/drivers/parport/parport_serial.c
> @@ -62,6 +62,7 @@ enum parport_pc_pci_cards {
> timedia_9079a,
> timedia_9079b,
> timedia_9079c,
> + wch_ch353_1s1p,
> wch_ch353_2s1p,
> sunix_2s1p,
> };
> @@ -148,6 +149,7 @@ static struct parport_pc_pci cards[] = {
> /* timedia_9079a */ { 1, { { 2, 3 }, } },
> /* timedia_9079b */ { 1, { { 2, 3 }, } },
> /* timedia_9079c */ { 1, { { 2, 3 }, } },
> + /* wch_ch353_1s1p*/ { 1, { { 1, -1}, } },
> /* wch_ch353_2s1p*/ { 1, { { 2, -1}, } },
> /* sunix_2s1p */ { 1, { { 3, -1 }, } },
> };
> @@ -253,6 +255,7 @@ static struct pci_device_id parport_serial_pci_tbl[] = {
> { 0x1409, 0x7168, 0x1409, 0xd079, 0, 0, timedia_9079c },
>
> /* WCH CARDS */
> + { 0x4348, 0x5053, PCI_ANY_ID, PCI_ANY_ID, 0, 0, wch_ch353_1s1p},
> { 0x4348, 0x7053, 0x4348, 0x3253, 0, 0, wch_ch353_2s1p},
>
> /*
> @@ -479,6 +482,12 @@ static struct pciserial_board pci_parport_serial_boards[] = {
> .base_baud = 921600,
> .uart_offset = 8,
> },
> + [wch_ch353_1s1p] = {
> + .flags = FL_BASE0|FL_BASE_BARS,
> + .num_ports = 1,
> + .base_baud = 115200,
> + .uart_offset = 8,
> + },
> [wch_ch353_2s1p] = {
> .flags = FL_BASE0|FL_BASE_BARS,
> .num_ports = 2,
> diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
> index b14bcba..f35a85f 100644
> --- a/drivers/tty/serial/8250/8250_pci.c
> +++ b/drivers/tty/serial/8250/8250_pci.c
> @@ -1778,6 +1778,7 @@ pci_wch_ch353_setup(struct serial_private *priv,
> #define PCI_DEVICE_ID_WCH_CH352_2S 0x3253
> #define PCI_DEVICE_ID_WCH_CH353_4S 0x3453
> #define PCI_DEVICE_ID_WCH_CH353_2S1PF 0x5046
> +#define PCI_DEVICE_ID_WCH_CH353_1S1P 0x5053
> #define PCI_DEVICE_ID_WCH_CH353_2S1P 0x7053
> #define PCI_VENDOR_ID_AGESTAR 0x5372
> #define PCI_DEVICE_ID_AGESTAR_9375 0x6872
> @@ -2410,6 +2411,14 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
> .subdevice = PCI_ANY_ID,
> .setup = pci_omegapci_setup,
> },
> + /* WCH CH353 1S1P card (16550 clone) */
> + {
> + .vendor = PCI_VENDOR_ID_WCH,
> + .device = PCI_DEVICE_ID_WCH_CH353_1S1P,
> + .subvendor = PCI_ANY_ID,
> + .subdevice = PCI_ANY_ID,
> + .setup = pci_wch_ch353_setup,
> + },
> /* WCH CH353 2S1P card (16550 clone) */
> {
> .vendor = PCI_VENDOR_ID_WCH,
> @@ -3526,6 +3535,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 */
> };
>
> /*
> --
> 1.9.1
>
--
Ezequiel García, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2014-05-24 18:36 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-05-24 18:24 [PATCH] parport: Add support for the WCH353 1S/1P multi-IO card Ezequiel Garcia
2014-05-24 18:36 ` Ezequiel Garcia
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®