diff options
Diffstat (limited to 'drivers/tty/serial/arc_uart.c')
-rw-r--r-- | drivers/tty/serial/arc_uart.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/tty/serial/arc_uart.c b/drivers/tty/serial/arc_uart.c index ea954c3be18b..41d2e351c06d 100644 --- a/drivers/tty/serial/arc_uart.c +++ b/drivers/tty/serial/arc_uart.c | |||
@@ -638,6 +638,36 @@ static int __init arc_serial_probe_earlyprintk(struct platform_device *pdev) | |||
638 | register_console(&arc_early_serial_console); | 638 | register_console(&arc_early_serial_console); |
639 | return 0; | 639 | return 0; |
640 | } | 640 | } |
641 | |||
642 | static __init void arc_early_serial_write(struct console *con, const char *s, | ||
643 | unsigned int n) | ||
644 | { | ||
645 | struct earlycon_device *dev = con->data; | ||
646 | |||
647 | uart_console_write(&dev->port, s, n, arc_serial_poll_putchar); | ||
648 | } | ||
649 | |||
650 | static int __init arc_early_console_setup(struct earlycon_device *dev, | ||
651 | const char *opt) | ||
652 | { | ||
653 | struct uart_port *port = &dev->port; | ||
654 | unsigned int l, h, hw_val; | ||
655 | |||
656 | if (!dev->port.membase) | ||
657 | return -ENODEV; | ||
658 | |||
659 | hw_val = port->uartclk / (dev->baud * 4) - 1; | ||
660 | l = hw_val & 0xFF; | ||
661 | h = (hw_val >> 8) & 0xFF; | ||
662 | |||
663 | UART_SET_BAUDL(port, l); | ||
664 | UART_SET_BAUDH(port, h); | ||
665 | |||
666 | dev->con->write = arc_early_serial_write; | ||
667 | return 0; | ||
668 | } | ||
669 | EARLYCON_DECLARE(arc_uart, arc_early_console_setup); | ||
670 | |||
641 | #endif /* CONFIG_SERIAL_ARC_CONSOLE */ | 671 | #endif /* CONFIG_SERIAL_ARC_CONSOLE */ |
642 | 672 | ||
643 | static int arc_serial_probe(struct platform_device *pdev) | 673 | static int arc_serial_probe(struct platform_device *pdev) |