serial: core: Simplify uart_get_rs485_mode()
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>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
8700a7ea55
commit
7cda0b9eb6
@@ -3559,9 +3559,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;
|
||||
|
||||
ret = device_property_read_u32_array(dev, "rs485-rts-delay",
|
||||
rs485_delay, 2);
|
||||
@@ -3600,26 +3601,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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user