serial: core: Simplify uart_get_rs485_mode()
[ Upstream commit 7cda0b9eb6eb9e761f452e2ef4e81eca20b19938 ] Simplify uart_get_rs485_mode() by using temporary variable for the GPIO descriptor. With that, use proper type for the flags of the GPIO descriptor. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Link: https://lore.kernel.org/r/20231003142346.3072929-1-andriy.shevchenko@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Stable-dep-of: 1a33e33ca0e8 ("serial: core: set missing supported flag for RX during TX GPIO") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
e961f8c696
commit
28c85cd0a6
@ -3572,9 +3572,10 @@ int uart_get_rs485_mode(struct uart_port *port)
|
||||
{
|
||||
struct serial_rs485 *rs485conf = &port->rs485;
|
||||
struct device *dev = port->dev;
|
||||
enum gpiod_flags dflags;
|
||||
struct gpio_desc *desc;
|
||||
u32 rs485_delay[2];
|
||||
int ret;
|
||||
int rx_during_tx_gpio_flag;
|
||||
|
||||
if (!(port->rs485_supported.flags & SER_RS485_ENABLED))
|
||||
return 0;
|
||||
@ -3616,26 +3617,19 @@ int uart_get_rs485_mode(struct uart_port *port)
|
||||
* bus participants enable it, no communication is possible at all.
|
||||
* Works fine for short cables and users may enable for longer cables.
|
||||
*/
|
||||
port->rs485_term_gpio = devm_gpiod_get_optional(dev, "rs485-term",
|
||||
GPIOD_OUT_LOW);
|
||||
if (IS_ERR(port->rs485_term_gpio)) {
|
||||
ret = PTR_ERR(port->rs485_term_gpio);
|
||||
port->rs485_term_gpio = NULL;
|
||||
return dev_err_probe(dev, ret, "Cannot get rs485-term-gpios\n");
|
||||
}
|
||||
desc = devm_gpiod_get_optional(dev, "rs485-term", GPIOD_OUT_LOW);
|
||||
if (IS_ERR(desc))
|
||||
return dev_err_probe(dev, PTR_ERR(desc), "Cannot get rs485-term-gpios\n");
|
||||
port->rs485_term_gpio = desc;
|
||||
if (port->rs485_term_gpio)
|
||||
port->rs485_supported.flags |= SER_RS485_TERMINATE_BUS;
|
||||
|
||||
rx_during_tx_gpio_flag = (rs485conf->flags & SER_RS485_RX_DURING_TX) ?
|
||||
GPIOD_OUT_HIGH : GPIOD_OUT_LOW;
|
||||
port->rs485_rx_during_tx_gpio = devm_gpiod_get_optional(dev,
|
||||
"rs485-rx-during-tx",
|
||||
rx_during_tx_gpio_flag);
|
||||
if (IS_ERR(port->rs485_rx_during_tx_gpio)) {
|
||||
ret = PTR_ERR(port->rs485_rx_during_tx_gpio);
|
||||
port->rs485_rx_during_tx_gpio = NULL;
|
||||
return dev_err_probe(dev, ret, "Cannot get rs485-rx-during-tx-gpios\n");
|
||||
}
|
||||
dflags = (rs485conf->flags & SER_RS485_RX_DURING_TX) ?
|
||||
GPIOD_OUT_HIGH : GPIOD_OUT_LOW;
|
||||
desc = devm_gpiod_get_optional(dev, "rs485-rx-during-tx", dflags);
|
||||
if (IS_ERR(desc))
|
||||
return dev_err_probe(dev, PTR_ERR(desc), "Cannot get rs485-rx-during-tx-gpios\n");
|
||||
port->rs485_rx_during_tx_gpio = desc;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user