From: Paul Mundt Date: Thu, 24 Nov 2011 11:18:32 +0000 (+0900) Subject: serial: sh-sci: Fix up modem control handling. X-Git-Tag: firefly_0821_release~3680^2~3743^2~11^4~4 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=cdf7c42fece7c641fcb85cfbf190fdc2a95d19ac;p=firefly-linux-kernel-4.4.55.git serial: sh-sci: Fix up modem control handling. At the moment things like CTS/RTS are reported for all ports, while the vast majority of them do not implement support at all (and others implement support entirely in hardware). Fix up the ->get_mctrl() reporting to simply assert DSR/CAR as other drivers without control lines do. Signed-off-by: Paul Mundt --- diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c index cd1379235f13..680d34af71f9 100644 --- a/drivers/tty/serial/sh-sci.c +++ b/drivers/tty/serial/sh-sci.c @@ -1106,19 +1106,26 @@ static unsigned int sci_tx_empty(struct uart_port *port) return (status & SCxSR_TEND(port)) && !in_tx_fifo ? TIOCSER_TEMT : 0; } +/* + * Modem control is a bit of a mixed bag for SCI(F) ports. Generally + * CTS/RTS is supported in hardware by at least one port and controlled + * via SCSPTR (SCxPCR for SCIFA/B parts), or external pins (presently + * handled via the ->init_pins() op, which is a bit of a one-way street, + * lacking any ability to defer pin control -- this will later be + * converted over to the GPIO framework). + */ static void sci_set_mctrl(struct uart_port *port, unsigned int mctrl) { - /* This routine is used for seting signals of: DTR, DCD, CTS/RTS */ - /* We use SCIF's hardware for CTS/RTS, so don't need any for that. */ - /* If you have signals for DTR and DCD, please implement here. */ + /* Nothing to do here. */ } static unsigned int sci_get_mctrl(struct uart_port *port) { - /* This routine is used for getting signals of: DTR, DCD, DSR, RI, - and CTS/RTS */ - - return TIOCM_DTR | TIOCM_RTS | TIOCM_CTS | TIOCM_DSR; + /* + * CTS/RTS is handled in hardware when supported, while nothing + * else is wired up. Keep it simple and simply assert DSR/CAR. + */ + return TIOCM_DSR | TIOCM_CAR; } #ifdef CONFIG_SERIAL_SH_SCI_DMA