X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=drivers%2Fserial%2Fserial_sh.c;h=ee1f2d768a14f936d3979f5c12bfdff0ba2aac99;hb=64f4a6192f0670de2d9af98900b750a3e7bf8ce6;hp=bcf246854f93f62c1b35d5f4b140ce7ab0a51e93;hpb=8bdd7efa2336310941e818f0b441ddc3946721de;p=u-boot diff --git a/drivers/serial/serial_sh.c b/drivers/serial/serial_sh.c index bcf246854f..ee1f2d768a 100644 --- a/drivers/serial/serial_sh.c +++ b/drivers/serial/serial_sh.c @@ -117,6 +117,14 @@ static int serial_rx_fifo_level(void) return scif_rxfill(&sh_sci); } +static void handle_error(void) +{ + sci_in(&sh_sci, SCxSR); + sci_out(&sh_sci, SCxSR, SCxSR_ERROR_CLEAR(&sh_sci)); + sci_in(&sh_sci, SCLSR); + sci_out(&sh_sci, SCLSR, 0x00); +} + void serial_raw_putc(const char c) { while (1) { @@ -136,25 +144,16 @@ static void sh_serial_putc(const char c) serial_raw_putc(c); } -static void sh_serial_puts(const char *s) -{ - char c; - while ((c = *s++) != 0) - serial_putc(c); -} - static int sh_serial_tstc(void) { + if (sci_in(&sh_sci, SCxSR) & SCIF_ERRORS) { + handle_error(); + return 0; + } + return serial_rx_fifo_level() ? 1 : 0; } -void handle_error(void) -{ - sci_in(&sh_sci, SCxSR); - sci_out(&sh_sci, SCxSR, SCxSR_ERROR_CLEAR(&sh_sci)); - sci_in(&sh_sci, SCLSR); - sci_out(&sh_sci, SCLSR, 0x00); -} int serial_getc_check(void) { @@ -190,14 +189,13 @@ static int sh_serial_getc(void) return ch; } -#ifdef CONFIG_SERIAL_MULTI static struct serial_device sh_serial_drv = { .name = "sh_serial", .start = sh_serial_init, .stop = NULL, .setbrg = sh_serial_setbrg, .putc = sh_serial_putc, - .puts = sh_serial_puts, + .puts = default_serial_puts, .getc = sh_serial_getc, .tstc = sh_serial_tstc, }; @@ -211,34 +209,3 @@ __weak struct serial_device *default_serial_console(void) { return &sh_serial_drv; } -#else -int serial_init(void) -{ - return sh_serial_init(); -} - -void serial_setbrg(void) -{ - sh_serial_setbrg(); -} - -void serial_putc(const char c) -{ - sh_serial_putc(c); -} - -void serial_puts(const char *s) -{ - sh_serial_puts(s); -} - -int serial_getc(void) -{ - return sh_serial_getc(); -} - -int serial_tstc(void) -{ - return sh_serial_tstc(); -} -#endif