mirror of
https://github.com/torvalds/linux.git
synced 2026-05-22 22:22:08 +02:00
serial: atmel: cleanup atmel_start+stop_tx()
Define local variables holding information about whether pdc or dma is used in the HW. These are retested several times by calls to atmel_use_pdc_tx() and atmel_use_dma_tx(). So to make the code more readable, simply cache the values. This is also a preparatory patch for the next one (where is_pdc is used once more in atmel_stop_tx()). Cc: Richard Genoud <richard.genoud@gmail.com> Cc: Nicolas Ferre <nicolas.ferre@microchip.com> Cc: Alexandre Belloni <alexandre.belloni@bootlin.com> Cc: Claudiu Beznea <claudiu.beznea@microchip.com> Cc: linux-arm-kernel@lists.infradead.org Reported-by: Michael Walle <michael@walle.cc> Signed-off-by: Jiri Slaby (SUSE) <jirislaby@kernel.org> Link: https://lore.kernel.org/r/20221123082736.24566-1-jirislaby@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
8682ab0eea
commit
94ec165c9f
|
|
@ -552,8 +552,9 @@ static u_int atmel_get_mctrl(struct uart_port *port)
|
|||
static void atmel_stop_tx(struct uart_port *port)
|
||||
{
|
||||
struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
|
||||
bool is_pdc = atmel_use_pdc_tx(port);
|
||||
|
||||
if (atmel_use_pdc_tx(port)) {
|
||||
if (is_pdc) {
|
||||
/* disable PDC transmit */
|
||||
atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTDIS);
|
||||
}
|
||||
|
|
@ -572,7 +573,6 @@ static void atmel_stop_tx(struct uart_port *port)
|
|||
if (atmel_uart_is_half_duplex(port))
|
||||
if (!atomic_read(&atmel_port->tasklet_shutdown))
|
||||
atmel_start_rx(port);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -581,20 +581,22 @@ static void atmel_stop_tx(struct uart_port *port)
|
|||
static void atmel_start_tx(struct uart_port *port)
|
||||
{
|
||||
struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
|
||||
bool is_pdc = atmel_use_pdc_tx(port);
|
||||
bool is_dma = is_pdc || atmel_use_dma_tx(port);
|
||||
|
||||
if (atmel_use_pdc_tx(port) && (atmel_uart_readl(port, ATMEL_PDC_PTSR)
|
||||
if (is_pdc && (atmel_uart_readl(port, ATMEL_PDC_PTSR)
|
||||
& ATMEL_PDC_TXTEN))
|
||||
/* The transmitter is already running. Yes, we
|
||||
really need this.*/
|
||||
return;
|
||||
|
||||
if (atmel_use_pdc_tx(port) || atmel_use_dma_tx(port))
|
||||
if (atmel_uart_is_half_duplex(port))
|
||||
atmel_stop_rx(port);
|
||||
if (is_dma && atmel_uart_is_half_duplex(port))
|
||||
atmel_stop_rx(port);
|
||||
|
||||
if (atmel_use_pdc_tx(port))
|
||||
if (is_pdc) {
|
||||
/* re-enable PDC transmit */
|
||||
atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTEN);
|
||||
}
|
||||
|
||||
/* Enable interrupts */
|
||||
atmel_uart_writel(port, ATMEL_US_IER, atmel_port->tx_done_mask);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user