diff --git a/common/serial.c b/common/serial.c index 269709d6b7..a18a65144c 100644 --- a/common/serial.c +++ b/common/serial.c @@ -83,6 +83,7 @@ serial_initfunc(sandbox_serial_initialize); serial_initfunc(clps7111_serial_initialize); serial_initfunc(imx_serial_initialize); serial_initfunc(ixp_serial_initialize); +serial_initfunc(ks8695_serial_initialize); void serial_register(struct serial_device *dev) { @@ -144,6 +145,7 @@ void serial_initialize(void) clps7111_serial_initialize(); imx_serial_initialize(); ixp_serial_initialize(); + ks8695_serial_initialize(); serial_assign(default_serial_console()->name); } diff --git a/drivers/serial/serial_ks8695.c b/drivers/serial/serial_ks8695.c index aacd1be630..b3af388942 100644 --- a/drivers/serial/serial_ks8695.c +++ b/drivers/serial/serial_ks8695.c @@ -20,6 +20,8 @@ #include #include +#include +#include #ifndef CONFIG_SERIAL1 #error "Bad: you didn't configure serial ..." @@ -54,7 +56,7 @@ struct ks8695uart { int serial_console = 1; -void serial_setbrg(void) +static void ks8695_serial_setbrg(void) { volatile struct ks8695uart *uartp = KS8695_UART_ADDR; @@ -63,14 +65,14 @@ void serial_setbrg(void) uartp->LCR = KS8695_UART_LINEC_WLEN8; } -int serial_init(void) +static int ks8695_serial_init(void) { serial_console = 1; serial_setbrg(); return 0; } -void serial_raw_putc(const char c) +static void ks8695_serial_raw_putc(const char c) { volatile struct ks8695uart *uartp = KS8695_UART_ADDR; int i; @@ -83,16 +85,16 @@ void serial_raw_putc(const char c) uartp->TX = c; } -void serial_putc(const char c) +static void ks8695_serial_putc(const char c) { if (serial_console) { - serial_raw_putc(c); + ks8695_serial_raw_putc(c); if (c == '\n') - serial_raw_putc('\r'); + ks8695_serial_raw_putc('\r'); } } -int serial_tstc(void) +static int ks8695_serial_tstc(void) { volatile struct ks8695uart *uartp = KS8695_UART_ADDR; if (serial_console) @@ -100,14 +102,14 @@ int serial_tstc(void) return 0; } -void serial_puts(const char *s) +static void ks8695_serial_puts(const char *s) { char c; while ((c = *s++) != 0) serial_putc(c); } -int serial_getc(void) +static int ks8695_serial_getc(void) { volatile struct ks8695uart *uartp = KS8695_UART_ADDR; @@ -115,3 +117,56 @@ int serial_getc(void) ; return (uartp->RX); } + +#ifdef CONFIG_SERIAL_MULTI +static struct serial_device ks8695_serial_drv = { + .name = "ks8695_serial", + .start = ks8695_serial_init, + .stop = NULL, + .setbrg = ks8695_serial_setbrg, + .putc = ks8695_serial_putc, + .puts = ks8695_serial_puts, + .getc = ks8695_serial_getc, + .tstc = ks8695_serial_tstc, +}; + +void ks8695_serial_initialize(void) +{ + serial_register(&ks8695_serial_drv); +} + +__weak struct serial_device *default_serial_console(void) +{ + return &ks8695_serial_drv; +} +#else +int serial_init(void) +{ + return ks8695_serial_init(); +} + +void serial_setbrg(void) +{ + ks8695_serial_setbrg(); +} + +void serial_putc(const char c) +{ + ks8695_serial_putc(c); +} + +void serial_puts(const char *s) +{ + ks8695_serial_puts(s); +} + +int serial_getc(void) +{ + return ks8695_serial_getc(); +} + +int serial_tstc(void) +{ + return ks8695_serial_tstc(); +} +#endif