diff options
Diffstat (limited to 'drivers/serial/sunsu.c')
-rw-r--r-- | drivers/serial/sunsu.c | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/drivers/serial/sunsu.c b/drivers/serial/sunsu.c index 68d262b15749..170d3d68c8f0 100644 --- a/drivers/serial/sunsu.c +++ b/drivers/serial/sunsu.c | |||
@@ -1329,11 +1329,9 @@ static void sunsu_console_write(struct console *co, const char *s, | |||
1329 | */ | 1329 | */ |
1330 | static int __init sunsu_console_setup(struct console *co, char *options) | 1330 | static int __init sunsu_console_setup(struct console *co, char *options) |
1331 | { | 1331 | { |
1332 | static struct ktermios dummy; | ||
1333 | struct ktermios termios; | ||
1332 | struct uart_port *port; | 1334 | struct uart_port *port; |
1333 | int baud = 9600; | ||
1334 | int bits = 8; | ||
1335 | int parity = 'n'; | ||
1336 | int flow = 'n'; | ||
1337 | 1335 | ||
1338 | printk("Console: ttyS%d (SU)\n", | 1336 | printk("Console: ttyS%d (SU)\n", |
1339 | (sunsu_reg.minor - 64) + co->index); | 1337 | (sunsu_reg.minor - 64) + co->index); |
@@ -1352,10 +1350,15 @@ static int __init sunsu_console_setup(struct console *co, char *options) | |||
1352 | */ | 1350 | */ |
1353 | spin_lock_init(&port->lock); | 1351 | spin_lock_init(&port->lock); |
1354 | 1352 | ||
1355 | if (options) | 1353 | /* Get firmware console settings. */ |
1356 | uart_parse_options(options, &baud, &parity, &bits, &flow); | 1354 | sunserial_console_termios(co, to_of_device(port->dev)->node); |
1357 | 1355 | ||
1358 | return uart_set_options(port, co, baud, parity, bits, flow); | 1356 | memset(&termios, 0, sizeof(struct ktermios)); |
1357 | termios.c_cflag = co->cflag; | ||
1358 | port->mctrl |= TIOCM_DTR; | ||
1359 | port->ops->set_termios(port, &termios, &dummy); | ||
1360 | |||
1361 | return 0; | ||
1359 | } | 1362 | } |
1360 | 1363 | ||
1361 | static struct console sunsu_console = { | 1364 | static struct console sunsu_console = { |
@@ -1409,6 +1412,7 @@ static int __devinit su_probe(struct of_device *op, const struct of_device_id *m | |||
1409 | struct uart_sunsu_port *up; | 1412 | struct uart_sunsu_port *up; |
1410 | struct resource *rp; | 1413 | struct resource *rp; |
1411 | enum su_type type; | 1414 | enum su_type type; |
1415 | bool ignore_line; | ||
1412 | int err; | 1416 | int err; |
1413 | 1417 | ||
1414 | type = su_get_type(dp); | 1418 | type = su_get_type(dp); |
@@ -1467,8 +1471,14 @@ static int __devinit su_probe(struct of_device *op, const struct of_device_id *m | |||
1467 | 1471 | ||
1468 | up->port.ops = &sunsu_pops; | 1472 | up->port.ops = &sunsu_pops; |
1469 | 1473 | ||
1474 | ignore_line = false; | ||
1475 | if (!strcmp(dp->name, "rsc-console") || | ||
1476 | !strcmp(dp->name, "lom-console")) | ||
1477 | ignore_line = true; | ||
1478 | |||
1470 | sunserial_console_match(SUNSU_CONSOLE(), dp, | 1479 | sunserial_console_match(SUNSU_CONSOLE(), dp, |
1471 | &sunsu_reg, up->port.line); | 1480 | &sunsu_reg, up->port.line, |
1481 | ignore_line); | ||
1472 | err = uart_add_one_port(&sunsu_reg, &up->port); | 1482 | err = uart_add_one_port(&sunsu_reg, &up->port); |
1473 | if (err) | 1483 | if (err) |
1474 | goto out_unmap; | 1484 | goto out_unmap; |
@@ -1517,6 +1527,10 @@ static const struct of_device_id su_match[] = { | |||
1517 | .name = "serial", | 1527 | .name = "serial", |
1518 | .compatible = "su", | 1528 | .compatible = "su", |
1519 | }, | 1529 | }, |
1530 | { | ||
1531 | .type = "serial", | ||
1532 | .compatible = "su", | ||
1533 | }, | ||
1520 | {}, | 1534 | {}, |
1521 | }; | 1535 | }; |
1522 | MODULE_DEVICE_TABLE(of, su_match); | 1536 | MODULE_DEVICE_TABLE(of, su_match); |
@@ -1548,6 +1562,12 @@ static int __init sunsu_init(void) | |||
1548 | num_uart++; | 1562 | num_uart++; |
1549 | } | 1563 | } |
1550 | } | 1564 | } |
1565 | for_each_node_by_type(dp, "serial") { | ||
1566 | if (of_device_is_compatible(dp, "su")) { | ||
1567 | if (su_get_type(dp) == SU_PORT_PORT) | ||
1568 | num_uart++; | ||
1569 | } | ||
1570 | } | ||
1551 | 1571 | ||
1552 | if (num_uart) { | 1572 | if (num_uart) { |
1553 | err = sunserial_register_minors(&sunsu_reg, num_uart); | 1573 | err = sunserial_register_minors(&sunsu_reg, num_uart); |