FAILED: patch "[PATCH] tty/serial: atmel: Add is_half_duplex helper" failed to apply to 4.9-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From f3040983132bf3477acd45d2452a906e67c2fec9 Mon Sep 17 00:00:00 2001
From: Razvan Stefanescu <[email protected]>
Date: Tue, 19 Mar 2019 15:20:34 +0200
Subject: [PATCH] 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.
Fixes b389f173aaa1 ("tty/serial: atmel: RS485 half duplex w/DMA: enable RX after TX is done")
Cc stable <[email protected]>
Signed-off-by Razvan Stefanescu <[email protected]>
Acked-by Richard Genoud <[email protected]>
Signed-off-by Greg Kroah-Hartman <[email protected]>
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); }
@@ -1512,9 +1514,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); }