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); |
