Skip to content

Commit

Permalink
serial: suncore: Add 'ignore_line' argument to sunserial_console_matc…
Browse files Browse the repository at this point in the history
…h().

This tells the logic to ignore the line match when deciding whether the
device is the OpenFirmware specified console device or not.

This is going to be used in the SU driver for rsc-console detection.

There is probably a better way to handle this, but this is the least
intrusive solution for now which we can validate won't break any other
cases.

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed Nov 24, 2009
1 parent 8301d38 commit 4e3533d
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 15 deletions.
19 changes: 10 additions & 9 deletions drivers/serial/suncore.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,20 +53,21 @@ void sunserial_unregister_minors(struct uart_driver *drv, int count)
EXPORT_SYMBOL(sunserial_unregister_minors);

int sunserial_console_match(struct console *con, struct device_node *dp,
struct uart_driver *drv, int line)
struct uart_driver *drv, int line, bool ignore_line)
{
int off;

if (!con || of_console_device != dp)
return 0;

off = 0;
if (of_console_options &&
*of_console_options == 'b')
off = 1;
if (!ignore_line) {
int off = 0;

if ((line & 1) != off)
return 0;
if (of_console_options &&
*of_console_options == 'b')
off = 1;

if ((line & 1) != off)
return 0;
}

con->index = line;
drv->cons = con;
Expand Down
2 changes: 1 addition & 1 deletion drivers/serial/suncore.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ extern int sunserial_register_minors(struct uart_driver *, int);
extern void sunserial_unregister_minors(struct uart_driver *, int);

extern int sunserial_console_match(struct console *, struct device_node *,
struct uart_driver *, int);
struct uart_driver *, int, bool);
extern void sunserial_console_termios(struct console *);

#endif /* !(_SERIAL_SUN_H) */
6 changes: 4 additions & 2 deletions drivers/serial/sunsab.c
Original file line number Diff line number Diff line change
Expand Up @@ -1027,10 +1027,12 @@ static int __devinit sab_probe(struct of_device *op, const struct of_device_id *
goto out1;

sunserial_console_match(SUNSAB_CONSOLE(), op->node,
&sunsab_reg, up[0].port.line);
&sunsab_reg, up[0].port.line,
false);

sunserial_console_match(SUNSAB_CONSOLE(), op->node,
&sunsab_reg, up[1].port.line);
&sunsab_reg, up[1].port.line,
false);

err = uart_add_one_port(&sunsab_reg, &up[0].port);
if (err)
Expand Down
3 changes: 2 additions & 1 deletion drivers/serial/sunsu.c
Original file line number Diff line number Diff line change
Expand Up @@ -1468,7 +1468,8 @@ static int __devinit su_probe(struct of_device *op, const struct of_device_id *m
up->port.ops = &sunsu_pops;

sunserial_console_match(SUNSU_CONSOLE(), dp,
&sunsu_reg, up->port.line);
&sunsu_reg, up->port.line,
false);
err = uart_add_one_port(&sunsu_reg, &up->port);
if (err)
goto out_unmap;
Expand Down
6 changes: 4 additions & 2 deletions drivers/serial/sunzilog.c
Original file line number Diff line number Diff line change
Expand Up @@ -1416,7 +1416,8 @@ static int __devinit zs_probe(struct of_device *op, const struct of_device_id *m

if (!keyboard_mouse) {
if (sunserial_console_match(SUNZILOG_CONSOLE(), op->node,
&sunzilog_reg, up[0].port.line))
&sunzilog_reg, up[0].port.line,
false))
up->flags |= SUNZILOG_FLAG_IS_CONS;
err = uart_add_one_port(&sunzilog_reg, &up[0].port);
if (err) {
Expand All @@ -1425,7 +1426,8 @@ static int __devinit zs_probe(struct of_device *op, const struct of_device_id *m
return err;
}
if (sunserial_console_match(SUNZILOG_CONSOLE(), op->node,
&sunzilog_reg, up[1].port.line))
&sunzilog_reg, up[1].port.line,
false))
up->flags |= SUNZILOG_FLAG_IS_CONS;
err = uart_add_one_port(&sunzilog_reg, &up[1].port);
if (err) {
Expand Down

0 comments on commit 4e3533d

Please sign in to comment.