tty: vt8500_serial: add polled console functions
authorAlexey Charkov <alchark@gmail.com>
Sat, 6 Sep 2014 17:21:15 +0000 (21:21 +0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 8 Sep 2014 23:29:36 +0000 (16:29 -0700)
This adds simple polling functions for single-character transmit
and receive, as used by kgdb.

Signed-off-by: Alexey Charkov <alchark@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/vt8500_serial.c

index 47e74f9b01aedc9e8ff0bf876f60e9daecc584d9..4203862ef6cbb56216f2cb0184447d5cf7297a49 100644 (file)
@@ -558,6 +558,33 @@ static struct console vt8500_console = {
 #define VT8500_CONSOLE NULL
 #endif
 
+#ifdef CONFIG_CONSOLE_POLL
+static int vt8500_get_poll_char(struct uart_port *port)
+{
+       unsigned int status = vt8500_read(port, VT8500_URFIDX);
+
+       if (!(status & 0x1f00))
+               return NO_POLL_CHAR;
+
+       return vt8500_read(port, VT8500_RXFIFO) & 0xff;
+}
+
+static void vt8500_put_poll_char(struct uart_port *port, unsigned char c)
+{
+       unsigned int status, tmout = 10000;
+
+       do {
+               status = vt8500_read(port, VT8500_URFIDX);
+
+               if (--tmout == 0)
+                       break;
+               udelay(1);
+       } while (status & 0x10);
+
+       vt8500_write(port, c, VT8500_TXFIFO);
+}
+#endif
+
 static struct uart_ops vt8500_uart_pops = {
        .tx_empty       = vt8500_tx_empty,
        .set_mctrl      = vt8500_set_mctrl,
@@ -575,6 +602,10 @@ static struct uart_ops vt8500_uart_pops = {
        .request_port   = vt8500_request_port,
        .config_port    = vt8500_config_port,
        .verify_port    = vt8500_verify_port,
+#ifdef CONFIG_CONSOLE_POLL
+       .poll_get_char  = vt8500_get_poll_char,
+       .poll_put_char  = vt8500_put_poll_char,
+#endif
 };
 
 static struct uart_driver vt8500_uart_driver = {