serial: 8250_dwlib: Implement SW half duplex support
authorIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Tue, 26 Apr 2022 12:24:40 +0000 (15:24 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 26 Apr 2022 12:47:32 +0000 (14:47 +0200)
This patch enables support for SW half-duplex mode using em485.

Cc: Eric Tremblay <etremblay@distech-controls.com>
Cc: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Tested-by: Vicente Bergas <vicencb@gmail.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Link: https://lore.kernel.org/r/20220426122448.38997-3-ilpo.jarvinen@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/8250/8250_dwlib.c

index 05b73c8e75bca5db5803ad03e96c2be71ec9088a..fbabfdd8c7b8f086445fc4b2ec73aa9f81c2154a 100644 (file)
@@ -157,8 +157,14 @@ void dw8250_setup_port(struct uart_port *p)
        u32 reg;
 
        pd->hw_rs485_support = dw8250_detect_rs485_hw(p);
-       if (pd->hw_rs485_support)
+       if (pd->hw_rs485_support) {
                p->rs485_config = dw8250_rs485_config;
+       } else {
+               p->rs485_config = serial8250_em485_config;
+               up->rs485_start_tx = serial8250_em485_start_tx;
+               up->rs485_stop_tx = serial8250_em485_stop_tx;
+       }
+       up->capabilities |= UART_CAP_NOTEMT;
 
        /*
         * If the Component Version Register returns zero, we know that
@@ -194,7 +200,7 @@ void dw8250_setup_port(struct uart_port *p)
                p->type = PORT_16550A;
                p->flags |= UPF_FIXED_TYPE;
                p->fifosize = DW_UART_CPR_FIFO_SIZE(reg);
-               up->capabilities = UART_CAP_FIFO;
+               up->capabilities = UART_CAP_FIFO | UART_CAP_NOTEMT;
        }
 
        if (reg & DW_UART_CPR_AFCE_MODE)