Message ID | 4E537BB3.60001@evidence.eu.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
> atmel_serial: RS485: receiving enabled when sending data > > By default the atmel_serial driver in RS485 mode disables receiving data until > all data in the send buffer has been sent. This flag allows to receive data > even whilst sending data. > > Signed-off-by: Bernhard Roth <br@pwrnet.de> > Signed-off-by: Claudio Scordino <claudio@evidence.eu.com> Acked-by: Alan Cox <alan@linux.intel.com> (although when we have people having a serious meta discussion about four spaces, or a tab or neither rather than functionality I despair) This is sensible functionality and relevant to various interfaces so makes sense.
On Tue, Aug 23, 2011 at 11:14:38AM +0100, Alan Cox wrote: > > atmel_serial: RS485: receiving enabled when sending data > > > > By default the atmel_serial driver in RS485 mode disables receiving data until > > all data in the send buffer has been sent. This flag allows to receive data > > even whilst sending data. > > > > Signed-off-by: Bernhard Roth <br@pwrnet.de> > > Signed-off-by: Claudio Scordino <claudio@evidence.eu.com> > > Acked-by: Alan Cox <alan@linux.intel.com> > > (although when we have people having a serious meta discussion about four > spaces, or a tab or neither rather than functionality I despair) We could ignore it, but then we end up with code being randomly formatted throughout files, which makes it _more_ likely that the code will be misread later. That in turn makes the chances of bugs introduced more likely in the future. It also encourages 'cleanup' patches further down the line, so more churn - which is something that Linus has been complaining about, particularly in regard to ARM stuff. It's far better to get things right the first time round than have to keep touching stuff time and time again - either because of cleanup patches or because of subtle bugs introduced by misreading the code.
diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c index af9b781..c7232a9 100644 --- a/drivers/tty/serial/atmel_serial.c +++ b/drivers/tty/serial/atmel_serial.c @@ -339,7 +339,8 @@ static void atmel_stop_tx(struct uart_port *port) /* Disable interrupts */ UART_PUT_IDR(port, atmel_port->tx_done_mask); - if (atmel_port->rs485.flags & SER_RS485_ENABLED) + if ((atmel_port->rs485.flags & SER_RS485_ENABLED) && + !(atmel_port->rs485.flags & SER_RS485_RX_DURING_TX)) atmel_start_rx(port); } @@ -356,7 +357,8 @@ static void atmel_start_tx(struct uart_port *port) really need this.*/ return; - if (atmel_port->rs485.flags & SER_RS485_ENABLED) + if ((atmel_port->rs485.flags & SER_RS485_ENABLED) && + !(atmel_port->rs485.flags & SER_RS485_RX_DURING_TX)) atmel_stop_rx(port); /* re-enable PDC transmit */ @@ -680,7 +682,8 @@ static void atmel_tx_dma(struct uart_port *port) /* Enable interrupts */ UART_PUT_IER(port, atmel_port->tx_done_mask); } else { - if (atmel_port->rs485.flags & SER_RS485_ENABLED) { + if ((atmel_port->rs485.flags & SER_RS485_ENABLED) && + !(atmel_port->rs485.flags & SER_RS485_RX_DURING_TX)) { /* DMA done, stop TX, start RX for RS485 */ atmel_start_rx(port); } diff --git a/include/linux/serial.h b/include/linux/serial.h index ef91406..97ff8e2 100644 --- a/include/linux/serial.h +++ b/include/linux/serial.h @@ -211,6 +211,7 @@ struct serial_rs485 { #define SER_RS485_RTS_ON_SEND (1 << 1) #define SER_RS485_RTS_AFTER_SEND (1 << 2) #define SER_RS485_RTS_BEFORE_SEND (1 << 3) +#define SER_RS485_RX_DURING_TX (1 << 4) __u32 delay_rts_before_send; /* Milliseconds */ __u32 delay_rts_after_send; /* Milliseconds */ __u32 padding[5]; /* Memory is cheap, new structs