]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
serial: 8250: Support rs485 devicetree properties
authorLukas Wunner <lukas@wunner.de>
Fri, 28 Feb 2020 13:31:02 +0000 (14:31 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 7 Mar 2020 08:52:01 +0000 (09:52 +0100)
Retrieve rs485 devicetree properties on registration of 8250 ports in
case they are attached to an rs485 transceiver.

If the property "linux,rs485-enabled-at-boot-time" is present, invoke
the ->rs485_config() callback to immediately deassert RTS, thereby
ceasing control of the bus.

Signed-off-by: Lukas Wunner <lukas@wunner.de>
Cc: Giulio Benetti <giulio.benetti@micronovasrl.com>
Cc: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Link: https://lore.kernel.org/r/5908ea89b7f9da54872d6634b606d83db032297a.1582895077.git.lukas@wunner.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/8250/8250_core.c
drivers/tty/serial/8250/8250_port.c

index f2a33c9082a681c3520f102fcc95d755724055e5..9a1d09fbb836df72382b0fa351d61a26173f358b 100644 (file)
@@ -1013,8 +1013,10 @@ int serial8250_register_8250_port(struct uart_8250_port *up)
                if (uart->port.fifosize && !uart->tx_loadsz)
                        uart->tx_loadsz = uart->port.fifosize;
 
-               if (up->port.dev)
+               if (up->port.dev) {
                        uart->port.dev = up->port.dev;
+                       uart_get_rs485_mode(uart->port.dev, &uart->port.rs485);
+               }
 
                if (up->port.flags & UPF_FIXED_TYPE)
                        uart->port.type = up->port.type;
index a8f4cedde4dcf0d246034ab145563a6c68476f47..40efcea8c6e7f7b12279664c8945e449135cde9e 100644 (file)
@@ -2989,6 +2989,9 @@ static void serial8250_config_port(struct uart_port *port, int flags)
        if (flags & UART_CONFIG_TYPE)
                autoconfig(up);
 
+       if (port->rs485.flags & SER_RS485_ENABLED)
+               port->rs485_config(port, &port->rs485);
+
        /* if access method is AU, it is a 16550 with a quirk */
        if (port->type == PORT_16550A && port->iotype == UPIO_AU)
                up->bugs |= UART_BUG_NOMSR;