patch "tty/serial: atmel: Add is_half_duplex helper" added to tty-linus
Subsystems (4)
This is a note to let you know that I've just added the patch titled
tty/serial: atmel: Add is_half_duplex helper
to my tty git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git
in the tty-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From c5d006f66f0f5d8ed729d1284bdecefe113cc95e Mon Sep 17 00:00:00 2001
From: Razvan Stefanescu <[email protected]>
Date: Tue, 19 Mar 2019 15:20:34 +0200
Subject: tty/serial: atmel: Add is_half_duplex helper
Use a helper function to check that a port needs to use half duplex communication, replacing several occurrences of multi-line bit checking.
--- drivers/tty/serial/atmel_serial.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-)
drivers/tty/serial/atmel_serial.c +12 -12
@@ -231,6 +231,13 @@ static inline void atmel_uart_write_char(struct uart_port *port, u8 value)__raw_writeb (value, port->membase +ATMEL_US_THR ); } +static inline int atmel_uart_is_half_duplex (struct uart_port *port) +{ +return ((port->rs485.flags &SER_RS485_ENABLED ) && + !(port->rs485.flags &SER_RS485_RX_DURING_TX )) || + (port->iso7816.flags &SER_ISO7816_ENABLED ); +} +#ifdef CONFIG_SERIAL_ATMEL_PDC static bool atmel_use_pdc_rx (struct uart_port *port) {
@@ -608,10 +615,9 @@ static void atmel_stop_tx(struct uart_port *port)/* Disable interrupts */ atmel_uart_writel (port,ATMEL_US_IDR , atmel_port->tx_done_mask); -if (((port->rs485.flags &SER_RS485_ENABLED ) && - !(port->rs485.flags &SER_RS485_RX_DURING_TX )) || - port->iso7816.flags &SER_ISO7816_ENABLED ) +if (atmel_uart_is_half_duplex (port))atmel_start_rx (port); + }/*
@@ -628,9 +634,7 @@ static void atmel_start_tx(struct uart_port *port)return ;if (atmel_use_pdc_tx (port) ||atmel_use_dma_tx (port)) -if (((port->rs485.flags &SER_RS485_ENABLED ) && - !(port->rs485.flags &SER_RS485_RX_DURING_TX )) || - port->iso7816.flags &SER_ISO7816_ENABLED ) +if (atmel_uart_is_half_duplex (port))atmel_stop_rx (port);if (atmel_use_pdc_tx (port))
@@ -928,9 +932,7 @@ static void atmel_complete_tx_dma(void *arg)*/ if (!uart_circ_empty (xmit))atmel_tasklet_schedule (atmel_port, &atmel_port->tasklet_tx); -else if (((port->rs485.flags &SER_RS485_ENABLED ) && - !(port->rs485.flags &SER_RS485_RX_DURING_TX )) || - port->iso7816.flags &SER_ISO7816_ENABLED ) { +else if (atmel_uart_is_half_duplex (port)) {/* DMA done, stop TX, start RX for RS485 */ atmel_start_rx (port); }
@@ -1508,9 +1510,7 @@ static void atmel_tx_pdc(struct uart_port *port)atmel_uart_writel (port,ATMEL_US_IER , atmel_port->tx_done_mask); }else { -if (((port->rs485.flags &SER_RS485_ENABLED ) && - !(port->rs485.flags &SER_RS485_RX_DURING_TX )) || - port->iso7816.flags &SER_ISO7816_ENABLED ) { +if (atmel_uart_is_half_duplex (port)) {/* DMA done, stop TX, start RX for RS485 */ atmel_start_rx (port); }
Signature · 1 line
2.21.0