Lines Matching full:rs485
185 if (old != port->mctrl && !(port->rs485.flags & SER_RS485_ENABLED)) in uart_update_mctrl()
1304 static int uart_check_rs485_flags(struct uart_port *port, struct serial_rs485 *rs485) in uart_check_rs485_flags() argument
1306 u32 flags = rs485->flags; in uart_check_rs485_flags()
1319 if (!(rs485->flags & SER_RS485_ADDRB) && in uart_check_rs485_flags()
1320 (rs485->flags & (SER_RS485_ADDR_RECV|SER_RS485_ADDR_DEST))) in uart_check_rs485_flags()
1324 if (!(rs485->flags & SER_RS485_ADDR_RECV) && rs485->addr_recv) in uart_check_rs485_flags()
1326 if (!(rs485->flags & SER_RS485_ADDR_DEST) && rs485->addr_dest) in uart_check_rs485_flags()
1333 struct serial_rs485 *rs485) in uart_sanitize_serial_rs485_delays() argument
1336 if (rs485->delay_rts_before_send) { in uart_sanitize_serial_rs485_delays()
1341 rs485->delay_rts_before_send = 0; in uart_sanitize_serial_rs485_delays()
1342 } else if (rs485->delay_rts_before_send > RS485_MAX_RTS_DELAY) { in uart_sanitize_serial_rs485_delays()
1343 rs485->delay_rts_before_send = RS485_MAX_RTS_DELAY; in uart_sanitize_serial_rs485_delays()
1346 port->name, port->line, rs485->delay_rts_before_send); in uart_sanitize_serial_rs485_delays()
1350 if (rs485->delay_rts_after_send) { in uart_sanitize_serial_rs485_delays()
1355 rs485->delay_rts_after_send = 0; in uart_sanitize_serial_rs485_delays()
1356 } else if (rs485->delay_rts_after_send > RS485_MAX_RTS_DELAY) { in uart_sanitize_serial_rs485_delays()
1357 rs485->delay_rts_after_send = RS485_MAX_RTS_DELAY; in uart_sanitize_serial_rs485_delays()
1360 port->name, port->line, rs485->delay_rts_after_send); in uart_sanitize_serial_rs485_delays()
1364 static void uart_sanitize_serial_rs485(struct uart_port *port, struct serial_rs485 *rs485) in uart_sanitize_serial_rs485() argument
1368 if (!(rs485->flags & SER_RS485_ENABLED)) { in uart_sanitize_serial_rs485()
1369 memset(rs485, 0, sizeof(*rs485)); in uart_sanitize_serial_rs485()
1375 !(rs485->flags & SER_RS485_RTS_ON_SEND) == in uart_sanitize_serial_rs485()
1376 !(rs485->flags & SER_RS485_RTS_AFTER_SEND)) { in uart_sanitize_serial_rs485()
1380 rs485->flags |= SER_RS485_RTS_ON_SEND; in uart_sanitize_serial_rs485()
1381 rs485->flags &= ~SER_RS485_RTS_AFTER_SEND; in uart_sanitize_serial_rs485()
1385 rs485->flags &= supported_flags; in uart_sanitize_serial_rs485()
1387 uart_sanitize_serial_rs485_delays(port, rs485); in uart_sanitize_serial_rs485()
1390 memset(rs485->padding0, 0, sizeof(rs485->padding0)); in uart_sanitize_serial_rs485()
1391 memset(rs485->padding1, 0, sizeof(rs485->padding1)); in uart_sanitize_serial_rs485()
1395 const struct serial_rs485 *rs485) in uart_set_rs485_termination() argument
1397 if (!(rs485->flags & SER_RS485_ENABLED)) in uart_set_rs485_termination()
1401 !!(rs485->flags & SER_RS485_TERMINATE_BUS)); in uart_set_rs485_termination()
1406 struct serial_rs485 *rs485 = &port->rs485; in uart_rs485_config() local
1410 if (!(rs485->flags & SER_RS485_ENABLED)) in uart_rs485_config()
1413 uart_sanitize_serial_rs485(port, rs485); in uart_rs485_config()
1414 uart_set_rs485_termination(port, rs485); in uart_rs485_config()
1417 ret = port->rs485_config(port, NULL, rs485); in uart_rs485_config()
1420 memset(rs485, 0, sizeof(*rs485)); in uart_rs485_config()
1426 struct serial_rs485 __user *rs485) in uart_get_rs485_config() argument
1432 aux = port->rs485; in uart_get_rs485_config()
1435 if (copy_to_user(rs485, &aux, sizeof(aux))) in uart_get_rs485_config()
1444 struct serial_rs485 rs485; in uart_set_rs485_config() local
1451 if (copy_from_user(&rs485, rs485_user, sizeof(*rs485_user))) in uart_set_rs485_config()
1454 ret = uart_check_rs485_flags(port, &rs485); in uart_set_rs485_config()
1457 uart_sanitize_serial_rs485(port, &rs485); in uart_set_rs485_config()
1458 uart_set_rs485_termination(port, &rs485); in uart_set_rs485_config()
1461 ret = port->rs485_config(port, &tty->termios, &rs485); in uart_set_rs485_config()
1463 port->rs485 = rs485; in uart_set_rs485_config()
1465 /* Reset RTS and other mctrl lines when disabling RS485 */ in uart_set_rs485_config()
1466 if (!(rs485.flags & SER_RS485_ENABLED)) in uart_set_rs485_config()
1473 if (copy_to_user(rs485_user, &port->rs485, sizeof(port->rs485))) in uart_set_rs485_config()
2380 if (!(uport->rs485.flags & SER_RS485_ENABLED)) in uart_suspend_port()
2472 if (!(uport->rs485.flags & SER_RS485_ENABLED)) in uart_resume_port()
2485 if (!(uport->rs485.flags & SER_RS485_ENABLED)) in uart_resume_port()
2593 if (!(port->rs485.flags & SER_RS485_ENABLED)) in uart_configure_port()
3557 * uart_get_rs485_mode() - retrieve rs485 properties for given uart
3561 * Documentation/devicetree/bindings/serial/rs485.txt.
3565 struct serial_rs485 *rs485conf = &port->rs485; in uart_get_rs485_mode()
3571 ret = device_property_read_u32_array(dev, "rs485-rts-delay", in uart_get_rs485_mode()
3592 if (device_property_read_bool(dev, "rs485-rx-during-tx")) in uart_get_rs485_mode()
3595 if (device_property_read_bool(dev, "linux,rs485-enabled-at-boot-time")) in uart_get_rs485_mode()
3598 if (device_property_read_bool(dev, "rs485-rts-active-low")) { in uart_get_rs485_mode()
3608 port->rs485_term_gpio = devm_gpiod_get_optional(dev, "rs485-term", in uart_get_rs485_mode()
3613 return dev_err_probe(dev, ret, "Cannot get rs485-term-gpios\n"); in uart_get_rs485_mode()
3621 "rs485-rx-during-tx", in uart_get_rs485_mode()
3626 return dev_err_probe(dev, ret, "Cannot get rs485-rx-during-tx-gpios\n"); in uart_get_rs485_mode()