Thread (14 messages) 14 messages, 3 authors, 2011-12-12
STALE5293d

[PATCH RESEND 3/8] serial: 8250: save rs485_flags per instance

From: Wolfram Sang <hidden>
Date: 2011-12-09 17:09:30
Also in: lkml
Subsystem: 8250/16?50 (and clone uarts) serial driver, the rest, tty layer and serial drivers · Maintainers: Greg Kroah-Hartman, Linus Torvalds, Jiri Slaby

When set, save RS485 related flags in the private struct. This avoids
mangling with chip registers when reading back the RS485 config. Also,
features can check their configuration at runtime which will be needed
for a later patch.

Signed-off-by: Wolfram Sang <redacted>
---
 drivers/tty/serial/8250.c |   16 +++++-----------
 1 files changed, 5 insertions(+), 11 deletions(-)
diff --git a/drivers/tty/serial/8250.c b/drivers/tty/serial/8250.c
index 920b4df..b5d3248 100644
--- a/drivers/tty/serial/8250.c
+++ b/drivers/tty/serial/8250.c
@@ -154,6 +154,7 @@ struct uart_8250_port {
 	unsigned char		lsr_saved_flags;
 #define MSR_SAVE_FLAGS UART_MSR_ANY_DELTA
 	unsigned char		msr_saved_flags;
+	__u32			rs485_flags;	/* copied from IOCTL */
 };
 
 struct irq_info {
@@ -2729,28 +2730,21 @@ static int serial8250_ioctl_port(struct uart_port *port,
 		serial_outp(up, UART_FCTR, fctr);
 		serial_outp(up, UART_LCR, lcr);
 		spin_unlock_irqrestore(&up->port.lock, flags);
+
+		up->rs485_flags = rs485ctrl.flags;
+
 		return 0;
 	}
 
 	case TIOCGRS485:
 	{
 		struct serial_rs485 rs485ctrl;
-		unsigned char lcr;
 
 		if (port->type != PORT_16850)
 			return -ENOTTY;
 
 		memset(&rs485ctrl, 0, sizeof(rs485ctrl));
-
-		spin_lock_irqsave(&up->port.lock, flags);
-		lcr = serial_inp(up, UART_LCR);
-		serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_B);
-		if (serial_inp(up, UART_FCTR) & UART_FCTR_RS485)
-			rs485ctrl.flags = SER_RS485_ENABLED;
-		else
-			rs485ctrl.flags = 0;
-		serial_outp(up, UART_LCR, lcr);
-		spin_unlock_irqrestore(&up->port.lock, flags);
+		rs485ctrl.flags = up->rs485_flags;
 
 		if (copy_to_user((struct serial_rs485 *)arg, &rs485ctrl,
 				 sizeof(rs485ctrl)))
-- 
1.7.7.3
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help