Skip to content

Commit 93f3350

Browse files
Claudio Scordinogregkh
authored andcommitted
RS485: fix inconsistencies in the meaning of some variables
The crisv10.c and the atmel_serial.c serial drivers intepret the fields of the serial_rs485 structure in a different way. In particular, crisv10.c uses SER_RS485_RTS_AFTER_SEND and SER_RS485_RTS_ON_SEND for the voltage of the RTS pin; atmel_serial.c, instead, uses these values to know if a delay must be set before and after sending. This patch makes the usage of these variables consistent across all drivers and fixes the Documentation as well. From now on, SER_RS485_RTS_AFTER_SEND and SER_RS485_RTS_ON_SEND will be used to set the voltage of the RTS pin (as in the crisv10.c driver); the delay will be understood by looking only at the value of delay_rts_before_send and delay_rts_after_send. Signed-off-by: Claudio Scordino <[email protected]> Signed-off-by: Darron Black <[email protected]> Acked-by: Jesper Nilsson <[email protected]> Acked-by: Nicolas Ferre <[email protected]> Acked-by: Alan Cox <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 90f04c2 commit 93f3350

File tree

4 files changed

+24
-30
lines changed

4 files changed

+24
-30
lines changed

Documentation/serial/serial-rs485.txt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,23 @@
9797

9898
struct serial_rs485 rs485conf;
9999

100-
/* Set RS485 mode: */
100+
/* Enable RS485 mode: */
101101
rs485conf.flags |= SER_RS485_ENABLED;
102102

103+
/* Set logical level for RTS pin equal to 1 when sending: */
104+
rs485conf.flags |= SER_RS485_RTS_ON_SEND;
105+
/* or, set logical level for RTS pin equal to 0 when sending: */
106+
rs485conf.flags &= ~(SER_RS485_RTS_ON_SEND);
107+
108+
/* Set logical level for RTS pin equal to 1 after sending: */
109+
rs485conf.flags |= SER_RS485_RTS_AFTER_SEND;
110+
/* or, set logical level for RTS pin equal to 0 after sending: */
111+
rs485conf.flags &= ~(SER_RS485_RTS_AFTER_SEND);
112+
103113
/* Set rts delay before send, if needed: */
104-
rs485conf.flags |= SER_RS485_RTS_BEFORE_SEND;
105114
rs485conf.delay_rts_before_send = ...;
106115

107116
/* Set rts delay after send, if needed: */
108-
rs485conf.flags |= SER_RS485_RTS_AFTER_SEND;
109117
rs485conf.delay_rts_after_send = ...;
110118

111119
/* Set this flag if you want to receive data even whilst sending data */

drivers/tty/serial/atmel_serial.c

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ void atmel_config_rs485(struct uart_port *port, struct serial_rs485 *rs485conf)
228228
if (rs485conf->flags & SER_RS485_ENABLED) {
229229
dev_dbg(port->dev, "Setting UART to RS485\n");
230230
atmel_port->tx_done_mask = ATMEL_US_TXEMPTY;
231-
if (rs485conf->flags & SER_RS485_RTS_AFTER_SEND)
231+
if ((rs485conf->delay_rts_after_send) > 0)
232232
UART_PUT_TTGR(port, rs485conf->delay_rts_after_send);
233233
mode |= ATMEL_US_USMODE_RS485;
234234
} else {
@@ -304,7 +304,7 @@ static void atmel_set_mctrl(struct uart_port *port, u_int mctrl)
304304

305305
if (atmel_port->rs485.flags & SER_RS485_ENABLED) {
306306
dev_dbg(port->dev, "Setting UART to RS485\n");
307-
if (atmel_port->rs485.flags & SER_RS485_RTS_AFTER_SEND)
307+
if ((atmel_port->rs485.delay_rts_after_send) > 0)
308308
UART_PUT_TTGR(port,
309309
atmel_port->rs485.delay_rts_after_send);
310310
mode |= ATMEL_US_USMODE_RS485;
@@ -1228,7 +1228,7 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios *termios,
12281228

12291229
if (atmel_port->rs485.flags & SER_RS485_ENABLED) {
12301230
dev_dbg(port->dev, "Setting UART to RS485\n");
1231-
if (atmel_port->rs485.flags & SER_RS485_RTS_AFTER_SEND)
1231+
if ((atmel_port->rs485.delay_rts_after_send) > 0)
12321232
UART_PUT_TTGR(port,
12331233
atmel_port->rs485.delay_rts_after_send);
12341234
mode |= ATMEL_US_USMODE_RS485;
@@ -1447,16 +1447,6 @@ static void __devinit atmel_of_init_port(struct atmel_uart_port *atmel_port,
14471447
rs485conf->delay_rts_after_send = rs485_delay[1];
14481448
rs485conf->flags = 0;
14491449

1450-
if (rs485conf->delay_rts_before_send == 0 &&
1451-
rs485conf->delay_rts_after_send == 0) {
1452-
rs485conf->flags |= SER_RS485_RTS_ON_SEND;
1453-
} else {
1454-
if (rs485conf->delay_rts_before_send)
1455-
rs485conf->flags |= SER_RS485_RTS_BEFORE_SEND;
1456-
if (rs485conf->delay_rts_after_send)
1457-
rs485conf->flags |= SER_RS485_RTS_AFTER_SEND;
1458-
}
1459-
14601450
if (of_get_property(np, "rs485-rx-during-tx", NULL))
14611451
rs485conf->flags |= SER_RS485_RX_DURING_TX;
14621452

drivers/tty/serial/crisv10.c

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3234,9 +3234,8 @@ rs_write(struct tty_struct *tty,
32343234
e100_disable_rx(info);
32353235
e100_enable_rx_irq(info);
32363236
#endif
3237-
if ((info->rs485.flags & SER_RS485_RTS_BEFORE_SEND) &&
3238-
(info->rs485.delay_rts_before_send > 0))
3239-
msleep(info->rs485.delay_rts_before_send);
3237+
if (info->rs485.delay_rts_before_send > 0)
3238+
msleep(info->rs485.delay_rts_before_send);
32403239
}
32413240
#endif /* CONFIG_ETRAX_RS485 */
32423241

@@ -3693,10 +3692,6 @@ rs_ioctl(struct tty_struct *tty,
36933692

36943693
rs485data.delay_rts_before_send = rs485ctrl.delay_rts_before_send;
36953694
rs485data.flags = 0;
3696-
if (rs485data.delay_rts_before_send != 0)
3697-
rs485data.flags |= SER_RS485_RTS_BEFORE_SEND;
3698-
else
3699-
rs485data.flags &= ~(SER_RS485_RTS_BEFORE_SEND);
37003695

37013696
if (rs485ctrl.enabled)
37023697
rs485data.flags |= SER_RS485_ENABLED;
@@ -4531,7 +4526,6 @@ static int __init rs_init(void)
45314526
/* Set sane defaults */
45324527
info->rs485.flags &= ~(SER_RS485_RTS_ON_SEND);
45334528
info->rs485.flags |= SER_RS485_RTS_AFTER_SEND;
4534-
info->rs485.flags &= ~(SER_RS485_RTS_BEFORE_SEND);
45354529
info->rs485.delay_rts_before_send = 0;
45364530
info->rs485.flags &= ~(SER_RS485_ENABLED);
45374531
#endif

include/linux/serial.h

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -207,13 +207,15 @@ struct serial_icounter_struct {
207207

208208
struct serial_rs485 {
209209
__u32 flags; /* RS485 feature flags */
210-
#define SER_RS485_ENABLED (1 << 0)
211-
#define SER_RS485_RTS_ON_SEND (1 << 1)
212-
#define SER_RS485_RTS_AFTER_SEND (1 << 2)
213-
#define SER_RS485_RTS_BEFORE_SEND (1 << 3)
210+
#define SER_RS485_ENABLED (1 << 0) /* If enabled */
211+
#define SER_RS485_RTS_ON_SEND (1 << 1) /* Logical level for
212+
RTS pin when
213+
sending */
214+
#define SER_RS485_RTS_AFTER_SEND (1 << 2) /* Logical level for
215+
RTS pin after sent*/
214216
#define SER_RS485_RX_DURING_TX (1 << 4)
215-
__u32 delay_rts_before_send; /* Milliseconds */
216-
__u32 delay_rts_after_send; /* Milliseconds */
217+
__u32 delay_rts_before_send; /* Delay before send (milliseconds) */
218+
__u32 delay_rts_after_send; /* Delay after send (milliseconds) */
217219
__u32 padding[5]; /* Memory is cheap, new structs
218220
are a royal PITA .. */
219221
};

0 commit comments

Comments
 (0)