Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 457931de authored by David S. Miller's avatar David S. Miller
Browse files

serial: suncore: Fix RSC/LOM handling in sunserial_console_termios().



RSC and LOM devices have fixed speed settings.

We already had some code to match and handle "rsc" named devices on
E250 systems, but we also have to handle 'rsc-console', 'rsc-control',
and 'lom-console'.

Also, in order to get this right regardless of what 'output-device'
happens to be, explicitly pass the UART device node pointer to this
routine.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4e3533d0
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -77,23 +77,24 @@ int sunserial_console_match(struct console *con, struct device_node *dp,
}
EXPORT_SYMBOL(sunserial_console_match);

void
sunserial_console_termios(struct console *con)
void sunserial_console_termios(struct console *con, struct device_node *uart_dp)
{
	struct device_node *dp;
	const char *od, *mode, *s;
	const char *mode, *s;
	char mode_prop[] = "ttyX-mode";
	int baud, bits, stop, cflag;
	char parity;

	dp = of_find_node_by_path("/options");
	od = of_get_property(dp, "output-device", NULL);
	if (!strcmp(od, "rsc")) {
		mode = of_get_property(of_console_device,
	if (!strcmp(uart_dp->name, "rsc") ||
	    !strcmp(uart_dp->name, "rsc-console") ||
	    !strcmp(uart_dp->name, "rsc-control")) {
		mode = of_get_property(uart_dp,
				       "ssp-console-modes", NULL);
		if (!mode)
			mode = "115200,8,n,1,-";
	} else if (!strcmp(uart_dp->name, "lom-console")) {
		mode = "9600,8,n,1,-";
	} else {
		struct device_node *dp;
		char c;

		c = 'a';
@@ -102,6 +103,7 @@ sunserial_console_termios(struct console *con)

		mode_prop[3] = c;

		dp = of_find_node_by_path("/options");
		mode = of_get_property(dp, mode_prop, NULL);
		if (!mode)
			mode = "9600,8,n,1,-";
+2 −1
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ extern void sunserial_unregister_minors(struct uart_driver *, int);

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

#endif /* !(_SERIAL_SUN_H) */
+1 −1
Original line number Diff line number Diff line
@@ -566,7 +566,7 @@ static int __devinit hv_probe(struct of_device *op, const struct of_device_id *m
		goto out_free_con_read_page;

	sunserial_console_match(&sunhv_console, op->node,
				&sunhv_reg, port->line);
				&sunhv_reg, port->line, false);

	err = uart_add_one_port(&sunhv_reg, port);
	if (err)
+1 −1
Original line number Diff line number Diff line
@@ -883,7 +883,7 @@ static int sunsab_console_setup(struct console *con, char *options)
	printk("Console: ttyS%d (SAB82532)\n",
	       (sunsab_reg.minor - 64) + con->index);

	sunserial_console_termios(con);
	sunserial_console_termios(con, to_of_device(up->port.dev)->node);

	switch (con->cflag & CBAUD) {
	case B150: baud = 150; break;
+1 −1
Original line number Diff line number Diff line
@@ -1180,7 +1180,7 @@ static int __init sunzilog_console_setup(struct console *con, char *options)
	       (sunzilog_reg.minor - 64) + con->index, con->index);

	/* Get firmware console settings.  */
	sunserial_console_termios(con);
	sunserial_console_termios(con, to_of_device(up->port.dev)->node);

	/* Firmware console speed is limited to 150-->38400 baud so
	 * this hackish cflag thing is OK.