diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c index 7c4ebe6ee18b133247a591177df0c556c1f0bd09..c3db16b7afa12f6b43e94fe5437bde3ca7aeea4a 100644 --- a/drivers/serial/8250.c +++ b/drivers/serial/8250.c @@ -2407,6 +2407,21 @@ serial8250_set_termios(struct uart_port *port, struct ktermios *termios, tty_termios_encode_baud_rate(termios, baud, baud); } +static void +serial8250_set_ldisc(struct uart_port *port) +{ + int line = port->line; + + if (line >= port->state->port.tty->driver->num) + return; + + if (port->state->port.tty->ldisc->ops->num == N_PPS) { + port->flags |= UPF_HARDPPS_CD; + serial8250_enable_ms(port); + } else + port->flags &= ~UPF_HARDPPS_CD; +} + static void serial8250_pm(struct uart_port *port, unsigned int state, unsigned int oldstate) @@ -2628,6 +2643,7 @@ static struct uart_ops serial8250_pops = { .startup = serial8250_startup, .shutdown = serial8250_shutdown, .set_termios = serial8250_set_termios, + .set_ldisc = serial8250_set_ldisc, .pm = serial8250_pm, .type = serial8250_type, .release_port = serial8250_release_port,