Skip to content

Commit 51f9377

Browse files
linosanfilippo-kunbusgregkh
authored andcommitted
serial: omap: do not override settings for RS485 support
The drivers RS485 support is deactivated if there is no RTS GPIO available. This is done by nullifying the ports rs485_supported struct. After that however the settings in serial_omap_rs485_supported are assigned to the same structure unconditionally, which results in an unintended reactivation of RS485 support. Fix this by moving the assignment to the beginning of serial_omap_probe_rs485() and thus before uart_get_rs485_mode() gets called. Also replace the assignment of rs485_config() to have the complete RS485 setup in one function. Fixes: e2752ae ("serial: omap: Disallow RS-485 if rts-gpio is not specified") Cc: <[email protected]> Signed-off-by: Lino Sanfilippo <[email protected]> Reviewed-by: Ilpo Järvinen <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 74eab89 commit 51f9377

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

drivers/tty/serial/omap-serial.c

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1483,6 +1483,13 @@ static struct omap_uart_port_info *of_get_uart_port_info(struct device *dev)
14831483
return omap_up_info;
14841484
}
14851485

1486+
static const struct serial_rs485 serial_omap_rs485_supported = {
1487+
.flags = SER_RS485_ENABLED | SER_RS485_RTS_ON_SEND | SER_RS485_RTS_AFTER_SEND |
1488+
SER_RS485_RX_DURING_TX,
1489+
.delay_rts_before_send = 1,
1490+
.delay_rts_after_send = 1,
1491+
};
1492+
14861493
static int serial_omap_probe_rs485(struct uart_omap_port *up,
14871494
struct device *dev)
14881495
{
@@ -1497,6 +1504,9 @@ static int serial_omap_probe_rs485(struct uart_omap_port *up,
14971504
if (!np)
14981505
return 0;
14991506

1507+
up->port.rs485_config = serial_omap_config_rs485;
1508+
up->port.rs485_supported = serial_omap_rs485_supported;
1509+
15001510
ret = uart_get_rs485_mode(&up->port);
15011511
if (ret)
15021512
return ret;
@@ -1531,13 +1541,6 @@ static int serial_omap_probe_rs485(struct uart_omap_port *up,
15311541
return 0;
15321542
}
15331543

1534-
static const struct serial_rs485 serial_omap_rs485_supported = {
1535-
.flags = SER_RS485_ENABLED | SER_RS485_RTS_ON_SEND | SER_RS485_RTS_AFTER_SEND |
1536-
SER_RS485_RX_DURING_TX,
1537-
.delay_rts_before_send = 1,
1538-
.delay_rts_after_send = 1,
1539-
};
1540-
15411544
static int serial_omap_probe(struct platform_device *pdev)
15421545
{
15431546
struct omap_uart_port_info *omap_up_info = dev_get_platdata(&pdev->dev);
@@ -1604,24 +1607,22 @@ static int serial_omap_probe(struct platform_device *pdev)
16041607
dev_info(up->port.dev, "no wakeirq for uart%d\n",
16051608
up->port.line);
16061609

1607-
ret = serial_omap_probe_rs485(up, &pdev->dev);
1608-
if (ret < 0)
1609-
goto err_rs485;
1610-
16111610
sprintf(up->name, "OMAP UART%d", up->port.line);
16121611
up->port.mapbase = mem->start;
16131612
up->port.membase = base;
16141613
up->port.flags = omap_up_info->flags;
16151614
up->port.uartclk = omap_up_info->uartclk;
1616-
up->port.rs485_config = serial_omap_config_rs485;
1617-
up->port.rs485_supported = serial_omap_rs485_supported;
16181615
if (!up->port.uartclk) {
16191616
up->port.uartclk = DEFAULT_CLK_SPEED;
16201617
dev_warn(&pdev->dev,
16211618
"No clock speed specified: using default: %d\n",
16221619
DEFAULT_CLK_SPEED);
16231620
}
16241621

1622+
ret = serial_omap_probe_rs485(up, &pdev->dev);
1623+
if (ret < 0)
1624+
goto err_rs485;
1625+
16251626
up->latency = PM_QOS_CPU_LATENCY_DEFAULT_VALUE;
16261627
up->calc_latency = PM_QOS_CPU_LATENCY_DEFAULT_VALUE;
16271628
cpu_latency_qos_add_request(&up->pm_qos_request, up->latency);

0 commit comments

Comments
 (0)