aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/serial/sunsu.c
diff options
context:
space:
mode:
authorRussell King <rmk@dyn-67.arm.linux.org.uk>2006-03-20 15:00:09 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2006-03-20 15:00:09 -0500
commitd358788f3f30113e49882187d794832905e42592 (patch)
tree8c796ee4bf719dad4d3947c03cef2f3fd6cb5940 /drivers/serial/sunsu.c
parent7705a8792b0fc82fd7d4dd923724606bbfd9fb20 (diff)
[SERIAL] kernel console should send CRLF not LFCR
Glen Turner reported that writing LFCR rather than the more traditional CRLF causes issues with some terminals. Since this aflicts many serial drivers, extract the common code to a library function (uart_console_write) and arrange for each driver to supply a "putchar" function. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'drivers/serial/sunsu.c')
-rw-r--r--drivers/serial/sunsu.c26
1 files changed, 9 insertions, 17 deletions
diff --git a/drivers/serial/sunsu.c b/drivers/serial/sunsu.c
index 4e453fa966ae..9ca1d8b9364b 100644
--- a/drivers/serial/sunsu.c
+++ b/drivers/serial/sunsu.c
@@ -1376,6 +1376,14 @@ static __inline__ void wait_for_xmitr(struct uart_sunsu_port *up)
1376 } 1376 }
1377} 1377}
1378 1378
1379static void sunsu_console_putchar(struct uart_port *port, int ch)
1380{
1381 struct uart_sunsu_port *up = (struct uart_sunsu_port *)port;
1382
1383 wait_for_xmitr(up);
1384 serial_out(up, UART_TX, ch);
1385}
1386
1379/* 1387/*
1380 * Print a string to the serial port trying not to disturb 1388 * Print a string to the serial port trying not to disturb
1381 * any possible real use of the port... 1389 * any possible real use of the port...
@@ -1385,7 +1393,6 @@ static void sunsu_console_write(struct console *co, const char *s,
1385{ 1393{
1386 struct uart_sunsu_port *up = &sunsu_ports[co->index]; 1394 struct uart_sunsu_port *up = &sunsu_ports[co->index];
1387 unsigned int ier; 1395 unsigned int ier;
1388 int i;
1389 1396
1390 /* 1397 /*
1391 * First save the UER then disable the interrupts 1398 * First save the UER then disable the interrupts
@@ -1393,22 +1400,7 @@ static void sunsu_console_write(struct console *co, const char *s,
1393 ier = serial_in(up, UART_IER); 1400 ier = serial_in(up, UART_IER);
1394 serial_out(up, UART_IER, 0); 1401 serial_out(up, UART_IER, 0);
1395 1402
1396 /* 1403 uart_console_write(&up->port, s, count, sunsu_console_putchar);
1397 * Now, do each character
1398 */
1399 for (i = 0; i < count; i++, s++) {
1400 wait_for_xmitr(up);
1401
1402 /*
1403 * Send the character out.
1404 * If a LF, also do CR...
1405 */
1406 serial_out(up, UART_TX, *s);
1407 if (*s == 10) {
1408 wait_for_xmitr(up);
1409 serial_out(up, UART_TX, 13);
1410 }
1411 }
1412 1404
1413 /* 1405 /*
1414 * Finally, wait for transmitter to become empty 1406 * Finally, wait for transmitter to become empty