spin_unlock_irqrestore(&uap->port.lock, flags);
 }
 
+static void pl010_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;
+               pl010_enable_ms(port);
+       } else
+               port->flags &= ~UPF_HARDPPS_CD;
+}
+
 static const char *pl010_type(struct uart_port *port)
 {
        return port->type == PORT_AMBA ? "AMBA" : NULL;
        .startup        = pl010_startup,
        .shutdown       = pl010_shutdown,
        .set_termios    = pl010_set_termios,
+       .set_ldisc      = pl010_set_ldisc,
        .type           = pl010_type,
        .release_port   = pl010_release_port,
        .request_port   = pl010_request_port,