/*
 * (C) P. Horton 2006
 */

#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/console.h>
#include <linux/serial_reg.h>
#include <asm/addrspace.h>
#include <asm/mach-cobalt/cobalt.h>

static void putchar(int c)
{
	if(c == '\n')
		putchar('\r');

	while(!(COBALT_UART[UART_LSR] & UART_LSR_THRE))
		;

	COBALT_UART[UART_TX] = c;
}

static void cons_write(struct console *c, const char *s, unsigned n)
{
	while(n-- && *s)
		putchar(*s++);
}

static struct console cons_info =
{
	.name	= "uart",
	.write	= cons_write,
	.flags	= CON_PRINTBUFFER | CON_BOOT,
	.index	= -1,
};

void __init cobalt_early_console(void)
{
	register_console(&cons_info);

	printk("Cobalt: early console registered\n");
}

void __init disable_early_printk(void)
{
	unregister_console(&cons_info);
}
