From 284c20ee718cfe58d5757f6f57e5189e3f2e803f Mon Sep 17 00:00:00 2001 From: Yin Kangkai Date: Sun, 30 Jan 2011 11:15:30 +0800 Subject: [PATCH] serial-core: reset the console speed on resume On some platforms, we need to restore the console speed on resume even it was not suspended (no_console_suspend), and on others we don't have to do that. So don't care about the "console_suspend_enabled" and unconditionally reset the console speed if it is a console. This is actually a redo of c2a2f94 (Set proper console speed on resume if console suspend is disabled) from Deepak Saxena. I also tried to investigate more to find out if this change will break others, here is what I've found out: commit c91c27dc74eefd5e977147dae396be5a8bb11170 Author: Jason Wang serial-core: restore termios settings when resume console ports commit 58d43b325609b8bf8c99ee8d832500212f5469bb Author: Jason Wang serial-core: skip call set_termios/console_start when no_console_suspend commit 4da740cd762542bc4eb8b728bd1122794e787697 Author: Stanislav Brabec serial-core: resume serial hardware with no_console_suspend commit c2a2f94bff6388485af0e999af1527662d278c0a Author: Deepak Saxena Set proper console speed on resume if console suspend is disabled from c2a2f94, we learned that, even if the console suspend is disabled (when no_console_suspend is set), we may still need to "reset the port to the state it was in before we suspended." Then with 4da740c, this piece of code is removed. And then Jason Wang added that back in 58d43b3 and c91c27d, to fix some breakage on OMAP3EVM platform. From 58d43b3 we learned that the "set_termios" things is actually needed by both console is suspended and not suspended. That's why I removed the console_suspended_enabled condition, and only call console_start() when we actually suspeneded it. I also noticed in this thread: http://marc.info/?t=129079257100004&r=1&w=2, which talked about on some platforms, UART HW will be cut power whether or not we set no_console_suspend, and then on resume it does not work quite well. I have a similar HW, and this patch fixed this issue, don't know if this patch also works on their platforms. [Update: Stanislav tested this patch on Zaurus and reported it improves the situation. Thanks.] CC: Greg KH CC: Deepak Saxena CC: Jason Wang CC: Stanislav Brabec CC: Daniel Drake Signed-off-by: Yin Kangkai Signed-off-by: Greg Kroah-Hartman --- drivers/tty/serial/serial_core.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c index 460a72d91bb78..20563c509b219 100644 --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c @@ -2064,7 +2064,7 @@ int uart_resume_port(struct uart_driver *drv, struct uart_port *uport) /* * Re-enable the console device after suspending. */ - if (console_suspend_enabled && uart_console(uport)) { + if (uart_console(uport)) { /* * First try to use the console cflag setting. */ @@ -2077,9 +2077,9 @@ int uart_resume_port(struct uart_driver *drv, struct uart_port *uport) if (port->tty && port->tty->termios && termios.c_cflag == 0) termios = *(port->tty->termios); - uart_change_pm(state, 0); uport->ops->set_termios(uport, &termios, NULL); - console_start(uport->cons); + if (console_suspend_enabled) + console_start(uport->cons); } if (port->flags & ASYNC_SUSPENDED) { -- 2.39.5