serial-core: resume serial hardware with no_console_suspend
authorStanislav Brabec <sbrabec@suse.cz>
Wed, 2 Dec 2009 15:20:56 +0000 (16:20 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 20 Jan 2010 23:03:29 +0000 (15:03 -0800)
commit4547be7809a3b775ce750ec7f8b5748954741523
treec4da7e9e0e461c42501299c355c03a9920ccdce6
parent6d34855d9aa281f72c533ecb827405139d1b0fe9
serial-core: resume serial hardware with no_console_suspend

Perform a tricky suspend/resume even with no_console_suspend.

With no_console_suspend, kernel skips serial port suspend/resume and the
serial hardware may remain in undefined state after resume. It actually
happens on devices that don't have BIOS that handle serial
initialization. It makes impossible to use serial console after resume.

Devices affected by this problem include:
Sharp Zaurus devices
Several PXA based ARM embedded boards

The patch does:
- Save the hardware state
- Perform buffer flush in time of its suspend call
- Tell the driver that port is suspended
- But still accept new data
- And keep console hardware in state that allows to send them

It allows to capture late console messages without breaking console
after resume.

This is just a resend of a patch discussed in these threads, as the
patch was not yet applied.

"Possible suspend/resume regression in .32-rc?" (Nov 1-5, 2009, ARM
list, later LKML)

"serial-core: resume serial hardware with no_console_suspend" (Sep
15-Oct 18, 2009, LKML & ARM lists)

Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
Tested-by: Haojian Zhuang <haojian.zhuang@gmail.com>
Tested-by: Daniel Mack <daniel@caiaq.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/serial/serial_core.c