Hi Petr,
On Wed, Feb 12, 2020 at 05:33:59PM +0100, Petr Štetiar wrote: > Daniel Golle <dan...@makrotopia.org> [2020-02-12 16:37:36]: > > ... > > > ++static inline int ar933x_uart_is_half_duplex(struct ar933x_uart_port *up) > > ++{ > > That function name is quite confusing as it's checking for 485/HD. If someone wants to implement other half-duplex uses, one could add more detection flags here (see atmel_serial.c where SER_ISO7816_ENABLED has been added recently). > > > ++ return (up->port.rs485.flags & SER_RS485_ENABLED) && > > ++ !(up->port.rs485.flags & SER_RS485_RX_DURING_TX); > > ++} > > ... Comes from atmel_serial.c and looks sane to me: static inline int atmel_uart_is_half_duplex(struct uart_port *port) { return (port->rs485.flags & SER_RS485_ENABLED) && !(port->rs485.flags & SER_RS485_RX_DURING_TX); } How else would you solve that? > > > +- if (!uart_circ_empty(xmit)) > > ++ if (!uart_circ_empty(xmit)) { > > + ar933x_uart_start_tx_interrupt(up); > > ++ } else if (ar933x_uart_is_half_duplex(up)) { > > ++ ar933x_uart_wait_tx_complete(up); > > ++ ar933x_uart_rx_flush(up); > > ++ ar933x_uart_start_rx_interrupt(up); > > ++ } > > This change looks strange, how are these two related? Where do you re-enable > the TX interrupts in that 485/HD case? So let's first look at it how it was before my change: If the circular buffer is non-empty, enable the TX interrupt which will soon call ar933x_uart_tx_chars() again to send more characters. If the circular buffer is empty, do nothing and return. So now I change the behaviour only in case there are no more characters left to send (ie. uart_circ_empty(xmit)) and handle the half-duplex emulation by waiting for transmission to complete, flushing everything received in the meantime and re-enabling the RX interrupt which was disabled before starting to transmit in the half-duplex case a few lines above. Cheers Daniel _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel