From: Giulio Benetti <giulio.benetti@micronovasrl.com> To: unlisted-recipients:; (no To-header on input) Cc: matwey.kornilov@gmail.com, Giulio Benetti <giulio.benetti@micronovasrl.com>, Andy Shevchenko <andriy.shevchenko@linux.intel.com>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Jiri Slaby <jslaby@suse.com>, Ed Blake <ed.blake@sondrel.com>, Joshua Scott <joshua.scott@alliedtelesis.co.nz>, linux-serial@vger.kernel.org (open list:SERIAL DRIVERS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH 1/4] serial: 8250_dw: add em485 support Date: Wed, 6 Jun 2018 11:51:54 +0200 [thread overview] Message-ID: <20180606095156.72628-4-giulio.benetti@micronovasrl.com> (raw) In-Reply-To: <20180606095156.72628-1-giulio.benetti@micronovasrl.com> Need to use rs485 transceiver so let's use existing em485 485 emulation layer on top of 8250. Add rs485_config callback to port. Signed-off-by: Giulio Benetti <giulio.benetti@micronovasrl.com> --- drivers/tty/serial/8250/8250_dw.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c index 6fcdb90f616a..45366e6e5411 100644 --- a/drivers/tty/serial/8250/8250_dw.c +++ b/drivers/tty/serial/8250/8250_dw.c @@ -314,6 +314,36 @@ static void dw8250_set_ldisc(struct uart_port *p, struct ktermios *termios) serial8250_do_set_ldisc(p, termios); } +static int dw8250_rs485_config(struct uart_port *p, + struct serial_rs485 *rs485) +{ + struct uart_8250_port *up = up_to_u8250p(p); + + /* Clamp the delays to [0, 100ms] */ + rs485->delay_rts_before_send = min(rs485->delay_rts_before_send, 100U); + rs485->delay_rts_after_send = min(rs485->delay_rts_after_send, 100U); + + p->rs485 = *rs485; + + /* + * Both serial8250_em485_init and serial8250_em485_destroy + * are idempotent + */ + if (rs485->flags & SER_RS485_ENABLED) { + int ret = serial8250_em485_init(up); + + if (ret) { + rs485->flags &= ~SER_RS485_ENABLED; + p->rs485.flags &= ~SER_RS485_ENABLED; + } + return ret; + } + + serial8250_em485_destroy(up); + + return 0; +} + /* * dw8250_fallback_dma_filter will prevent the UART from getting just any free * channel on platforms that have DMA engines, but don't have any channels @@ -449,6 +479,7 @@ static int dw8250_probe(struct platform_device *pdev) p->serial_out = dw8250_serial_out; p->set_ldisc = dw8250_set_ldisc; p->set_termios = dw8250_set_termios; + p->rs485_config = dw8250_rs485_config; p->membase = devm_ioremap(dev, regs->start, resource_size(regs)); if (!p->membase) -- 2.17.1
WARNING: multiple messages have this Message-ID (diff)
From: Giulio Benetti <giulio.benetti@micronovasrl.com> Cc: matwey.kornilov@gmail.com, Giulio Benetti <giulio.benetti@micronovasrl.com>, Andy Shevchenko <andriy.shevchenko@linux.intel.com>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Jiri Slaby <jslaby@suse.com>, Ed Blake <ed.blake@sondrel.com>, Joshua Scott <joshua.scott@alliedtelesis.co.nz>, "open list:SERIAL DRIVERS" <linux-serial@vger.kernel.org>, open list <linux-kernel@vger.kernel.org> Subject: [PATCH 1/4] serial: 8250_dw: add em485 support Date: Wed, 6 Jun 2018 11:51:54 +0200 [thread overview] Message-ID: <20180606095156.72628-4-giulio.benetti@micronovasrl.com> (raw) In-Reply-To: <20180606095156.72628-1-giulio.benetti@micronovasrl.com> Need to use rs485 transceiver so let's use existing em485 485 emulation layer on top of 8250. Add rs485_config callback to port. Signed-off-by: Giulio Benetti <giulio.benetti@micronovasrl.com> --- drivers/tty/serial/8250/8250_dw.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c index 6fcdb90f616a..45366e6e5411 100644 --- a/drivers/tty/serial/8250/8250_dw.c +++ b/drivers/tty/serial/8250/8250_dw.c @@ -314,6 +314,36 @@ static void dw8250_set_ldisc(struct uart_port *p, struct ktermios *termios) serial8250_do_set_ldisc(p, termios); } +static int dw8250_rs485_config(struct uart_port *p, + struct serial_rs485 *rs485) +{ + struct uart_8250_port *up = up_to_u8250p(p); + + /* Clamp the delays to [0, 100ms] */ + rs485->delay_rts_before_send = min(rs485->delay_rts_before_send, 100U); + rs485->delay_rts_after_send = min(rs485->delay_rts_after_send, 100U); + + p->rs485 = *rs485; + + /* + * Both serial8250_em485_init and serial8250_em485_destroy + * are idempotent + */ + if (rs485->flags & SER_RS485_ENABLED) { + int ret = serial8250_em485_init(up); + + if (ret) { + rs485->flags &= ~SER_RS485_ENABLED; + p->rs485.flags &= ~SER_RS485_ENABLED; + } + return ret; + } + + serial8250_em485_destroy(up); + + return 0; +} + /* * dw8250_fallback_dma_filter will prevent the UART from getting just any free * channel on platforms that have DMA engines, but don't have any channels @@ -449,6 +479,7 @@ static int dw8250_probe(struct platform_device *pdev) p->serial_out = dw8250_serial_out; p->set_ldisc = dw8250_set_ldisc; p->set_termios = dw8250_set_termios; + p->rs485_config = dw8250_rs485_config; p->membase = devm_ioremap(dev, regs->start, resource_size(regs)); if (!p->membase) -- 2.17.1
next prev parent reply other threads:[~2018-06-06 9:52 UTC|newest] Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-06-01 12:40 [PATCH 0/8] serial: 8250: Add 485 emulation to 8250_dw Giulio Benetti 2018-06-01 12:40 ` [PATCH 1/8] serial: 8250_dw: add em485 support Giulio Benetti 2018-06-01 12:40 ` [PATCH 2/8] serial: 8250_dw: allow enable rs485 at boot time Giulio Benetti 2018-06-01 12:40 ` [PATCH 3/8] serial: 8250: Copy em485 from port to real port Giulio Benetti 2018-06-04 10:13 ` Andy Shevchenko 2018-06-04 10:52 ` Giulio Benetti 2018-06-01 12:40 ` [PATCH 4/8] serial: 8250: Handle case port doesn't have TEMT interrupt using em485 Giulio Benetti 2018-06-04 10:17 ` Andy Shevchenko 2018-06-04 10:50 ` Giulio Benetti 2018-06-04 11:38 ` Andy Shevchenko 2018-06-04 11:50 ` Giulio Benetti 2018-06-04 12:26 ` Andy Shevchenko 2018-06-04 17:40 ` Matwey V. Kornilov 2018-06-04 18:50 ` Giulio Benetti 2018-06-05 10:51 ` Matwey V. Kornilov 2018-06-06 9:36 ` Giulio Benetti 2018-06-06 9:49 ` [PATCH 2/4] serial: 8250: Copy mctrl when register port Giulio Benetti 2018-06-06 9:49 ` Giulio Benetti 2018-06-06 9:49 ` [PATCH 3/4] serial: 8250: Make em485_rts_after_send() set mctrl according to rts state Giulio Benetti 2018-06-06 9:49 ` Giulio Benetti 2018-06-06 12:02 ` Andy Shevchenko 2018-06-06 9:49 ` [PATCH 4/4] serial: core: Mask mctrl with TIOCM_RTS too if rs485 on and RTS_AFTER_SEND set Giulio Benetti 2018-06-06 9:49 ` Giulio Benetti 2018-06-06 12:03 ` Andy Shevchenko 2018-06-06 12:07 ` Giulio Benetti 2018-06-06 9:49 ` [PATCH 1/4] serial: 8250: Copy em485 from port to real port Giulio Benetti 2018-06-06 9:49 ` Giulio Benetti 2018-06-06 11:56 ` Andy Shevchenko 2018-06-06 12:15 ` Giulio Benetti 2018-06-06 13:11 ` Andy Shevchenko 2018-06-06 14:32 ` Giulio Benetti 2018-06-06 18:55 ` Matwey V. Kornilov 2018-06-06 19:15 ` Giulio Benetti 2018-06-07 7:03 ` Matwey V. Kornilov 2018-06-07 12:43 ` Giulio Benetti 2018-06-06 12:01 ` [PATCH 2/4] serial: 8250: Copy mctrl when register port Andy Shevchenko 2018-06-06 9:51 ` [PATCH 2/4] serial: 8250_dw: allow enable rs485 at boot time Giulio Benetti 2018-06-06 9:51 ` Giulio Benetti 2018-06-06 9:51 ` [PATCH 3/4] serial: 8250: Handle case port doesn't have TEMT interrupt using em485 Giulio Benetti 2018-06-06 9:51 ` Giulio Benetti 2018-06-13 16:59 ` Alan Cox 2018-06-13 16:59 ` Alan Cox 2018-06-06 9:51 ` [PATCH 4/4] serial: 8250_dw: treat rpm suspend with -EBUSY if RS485 ON and RTS_AFTER_SEND Giulio Benetti 2018-06-06 9:51 ` Giulio Benetti 2018-06-06 9:51 ` Giulio Benetti [this message] 2018-06-06 9:51 ` [PATCH 1/4] serial: 8250_dw: add em485 support Giulio Benetti 2018-06-06 16:51 ` Andy Shevchenko 2018-06-06 19:16 ` Giulio Benetti 2018-06-01 12:40 ` [PATCH 5/8] serial: 8250_dw: treat rpm suspend with -EBUSY if RS485 ON and RTS_AFTER_SEND Giulio Benetti 2018-06-01 12:40 ` [PATCH 6/8] serial: 8250: Copy mctrl when register port Giulio Benetti 2018-06-06 14:31 ` Aaron Sierra 2018-06-06 14:44 ` Giulio Benetti 2018-06-01 12:40 ` [PATCH 7/8] serial: 8250: Make em485_rts_after_send() set mctrl according to rts state Giulio Benetti 2018-06-01 12:40 ` [PATCH 8/8] serial: core: Mask mctrl with TIOCM_RTS too if rs485 on and RTS_AFTER_SEND set Giulio Benetti 2018-06-04 10:12 ` [PATCH 0/8] serial: 8250: Add 485 emulation to 8250_dw Andy Shevchenko 2018-06-04 10:34 ` Matwey V. Kornilov 2018-06-04 10:42 ` Giulio Benetti 2018-06-04 11:44 ` Andy Shevchenko 2018-06-04 14:58 ` Giulio Benetti
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20180606095156.72628-4-giulio.benetti@micronovasrl.com \ --to=giulio.benetti@micronovasrl.com \ --cc=andriy.shevchenko@linux.intel.com \ --cc=ed.blake@sondrel.com \ --cc=gregkh@linuxfoundation.org \ --cc=joshua.scott@alliedtelesis.co.nz \ --cc=jslaby@suse.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-serial@vger.kernel.org \ --cc=matwey.kornilov@gmail.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.