Lines Matching full:rs485
185 if (old != port->mctrl && !(port->rs485.flags & SER_RS485_ENABLED)) in uart_update_mctrl()
1306 static int uart_check_rs485_flags(struct uart_port *port, struct serial_rs485 *rs485) in uart_check_rs485_flags() argument
1308 u32 flags = rs485->flags; in uart_check_rs485_flags()
1321 if (!(rs485->flags & SER_RS485_ADDRB) && in uart_check_rs485_flags()
1322 (rs485->flags & (SER_RS485_ADDR_RECV|SER_RS485_ADDR_DEST))) in uart_check_rs485_flags()
1326 if (!(rs485->flags & SER_RS485_ADDR_RECV) && rs485->addr_recv) in uart_check_rs485_flags()
1328 if (!(rs485->flags & SER_RS485_ADDR_DEST) && rs485->addr_dest) in uart_check_rs485_flags()
1335 struct serial_rs485 *rs485) in uart_sanitize_serial_rs485_delays() argument
1338 if (rs485->delay_rts_before_send) { in uart_sanitize_serial_rs485_delays()
1343 rs485->delay_rts_before_send = 0; in uart_sanitize_serial_rs485_delays()
1344 } else if (rs485->delay_rts_before_send > RS485_MAX_RTS_DELAY) { in uart_sanitize_serial_rs485_delays()
1345 rs485->delay_rts_before_send = RS485_MAX_RTS_DELAY; in uart_sanitize_serial_rs485_delays()
1348 port->name, port->line, rs485->delay_rts_before_send); in uart_sanitize_serial_rs485_delays()
1352 if (rs485->delay_rts_after_send) { in uart_sanitize_serial_rs485_delays()
1357 rs485->delay_rts_after_send = 0; in uart_sanitize_serial_rs485_delays()
1358 } else if (rs485->delay_rts_after_send > RS485_MAX_RTS_DELAY) { in uart_sanitize_serial_rs485_delays()
1359 rs485->delay_rts_after_send = RS485_MAX_RTS_DELAY; in uart_sanitize_serial_rs485_delays()
1362 port->name, port->line, rs485->delay_rts_after_send); in uart_sanitize_serial_rs485_delays()
1366 static void uart_sanitize_serial_rs485(struct uart_port *port, struct serial_rs485 *rs485) in uart_sanitize_serial_rs485() argument
1370 if (!(rs485->flags & SER_RS485_ENABLED)) { in uart_sanitize_serial_rs485()
1371 memset(rs485, 0, sizeof(*rs485)); in uart_sanitize_serial_rs485()
1375 /* Clear other RS485 flags but SER_RS485_TERMINATE_BUS and return if enabling RS422 */ in uart_sanitize_serial_rs485()
1376 if (rs485->flags & SER_RS485_MODE_RS422) { in uart_sanitize_serial_rs485()
1377 rs485->flags &= (SER_RS485_ENABLED | SER_RS485_MODE_RS422 | SER_RS485_TERMINATE_BUS); in uart_sanitize_serial_rs485()
1381 rs485->flags &= supported_flags; in uart_sanitize_serial_rs485()
1384 if (!(rs485->flags & SER_RS485_RTS_ON_SEND) == in uart_sanitize_serial_rs485()
1385 !(rs485->flags & SER_RS485_RTS_AFTER_SEND)) { in uart_sanitize_serial_rs485()
1387 rs485->flags |= SER_RS485_RTS_ON_SEND; in uart_sanitize_serial_rs485()
1388 rs485->flags &= ~SER_RS485_RTS_AFTER_SEND; in uart_sanitize_serial_rs485()
1394 rs485->flags |= SER_RS485_RTS_AFTER_SEND; in uart_sanitize_serial_rs485()
1395 rs485->flags &= ~SER_RS485_RTS_ON_SEND; in uart_sanitize_serial_rs485()
1403 uart_sanitize_serial_rs485_delays(port, rs485); in uart_sanitize_serial_rs485()
1406 memset(rs485->padding0, 0, sizeof(rs485->padding0)); in uart_sanitize_serial_rs485()
1407 memset(rs485->padding1, 0, sizeof(rs485->padding1)); in uart_sanitize_serial_rs485()
1411 const struct serial_rs485 *rs485) in uart_set_rs485_termination() argument
1413 if (!(rs485->flags & SER_RS485_ENABLED)) in uart_set_rs485_termination()
1417 !!(rs485->flags & SER_RS485_TERMINATE_BUS)); in uart_set_rs485_termination()
1421 const struct serial_rs485 *rs485) in uart_set_rs485_rx_during_tx() argument
1423 if (!(rs485->flags & SER_RS485_ENABLED)) in uart_set_rs485_rx_during_tx()
1427 !!(rs485->flags & SER_RS485_RX_DURING_TX)); in uart_set_rs485_rx_during_tx()
1432 struct serial_rs485 *rs485 = &port->rs485; in uart_rs485_config() local
1436 if (!(rs485->flags & SER_RS485_ENABLED)) in uart_rs485_config()
1439 uart_sanitize_serial_rs485(port, rs485); in uart_rs485_config()
1440 uart_set_rs485_termination(port, rs485); in uart_rs485_config()
1441 uart_set_rs485_rx_during_tx(port, rs485); in uart_rs485_config()
1444 ret = port->rs485_config(port, NULL, rs485); in uart_rs485_config()
1447 memset(rs485, 0, sizeof(*rs485)); in uart_rs485_config()
1457 struct serial_rs485 __user *rs485) in uart_get_rs485_config() argument
1463 aux = port->rs485; in uart_get_rs485_config()
1466 if (copy_to_user(rs485, &aux, sizeof(aux))) in uart_get_rs485_config()
1475 struct serial_rs485 rs485; in uart_set_rs485_config() local
1482 if (copy_from_user(&rs485, rs485_user, sizeof(*rs485_user))) in uart_set_rs485_config()
1485 ret = uart_check_rs485_flags(port, &rs485); in uart_set_rs485_config()
1488 uart_sanitize_serial_rs485(port, &rs485); in uart_set_rs485_config()
1489 uart_set_rs485_termination(port, &rs485); in uart_set_rs485_config()
1490 uart_set_rs485_rx_during_tx(port, &rs485); in uart_set_rs485_config()
1493 ret = port->rs485_config(port, &tty->termios, &rs485); in uart_set_rs485_config()
1495 port->rs485 = rs485; in uart_set_rs485_config()
1497 /* Reset RTS and other mctrl lines when disabling RS485 */ in uart_set_rs485_config()
1498 if (!(rs485.flags & SER_RS485_ENABLED)) in uart_set_rs485_config()
1505 !!(port->rs485.flags & SER_RS485_TERMINATE_BUS)); in uart_set_rs485_config()
1507 !!(port->rs485.flags & SER_RS485_RX_DURING_TX)); in uart_set_rs485_config()
1511 if (copy_to_user(rs485_user, &port->rs485, sizeof(port->rs485))) in uart_set_rs485_config()
2407 if (!(uport->rs485.flags & SER_RS485_ENABLED)) in uart_suspend_port()
2496 if (!(uport->rs485.flags & SER_RS485_ENABLED)) in uart_resume_port()
2509 if (!(uport->rs485.flags & SER_RS485_ENABLED)) in uart_resume_port()
2624 if (!(port->rs485.flags & SER_RS485_ENABLED)) in uart_configure_port()
3581 * uart_get_rs485_mode() - retrieve rs485 properties for given uart
3585 * Documentation/devicetree/bindings/serial/rs485.txt.
3589 struct serial_rs485 *rs485conf = &port->rs485; in uart_get_rs485_mode()
3599 ret = device_property_read_u32_array(dev, "rs485-rts-delay", in uart_get_rs485_mode()
3620 if (device_property_read_bool(dev, "rs485-rx-during-tx")) in uart_get_rs485_mode()
3623 if (device_property_read_bool(dev, "linux,rs485-enabled-at-boot-time")) in uart_get_rs485_mode()
3626 if (device_property_read_bool(dev, "rs485-rts-active-low")) { in uart_get_rs485_mode()
3636 desc = devm_gpiod_get_optional(dev, "rs485-term", GPIOD_OUT_LOW); in uart_get_rs485_mode()
3638 return dev_err_probe(dev, PTR_ERR(desc), "Cannot get rs485-term-gpios\n"); in uart_get_rs485_mode()
3645 desc = devm_gpiod_get_optional(dev, "rs485-rx-during-tx", dflags); in uart_get_rs485_mode()
3647 return dev_err_probe(dev, PTR_ERR(desc), "Cannot get rs485-rx-during-tx-gpios\n"); in uart_get_rs485_mode()