serial: change the divisor latch only when prescalar actually changed
authorYin Kangkai <kangkai.yin@linux.intel.com>
Wed, 9 Feb 2011 03:35:18 +0000 (11:35 +0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 17 Feb 2011 19:23:50 +0000 (11:23 -0800)
commit0d0389e5414c8950b1613e8bdc74289cde3d6d98
tree3c67d32443f0439e9e8cae1c0fb299abcd3067c0
parent95926d2db6256e08d06b753752a0d903a0580acc
serial: change the divisor latch only when prescalar actually changed

In 8250.c original ns16550 autoconfig code, we change the divisor latch when
we goto to high speed mode, we're assuming the previous speed is legacy. This
some times is not true.

For example in a system with both CONFIG_SERIAL_8250 and
CONFIG_SERIAL_8250_PNP set, in this case, the code (autoconfig) will be called
twice, one in serial8250_init/probe() and the other is from
serial_pnp_probe. When serial_pnp_probe calls the autoconfig for NS16550A,
it's already in high speed mode, change the divisor latch (quot << 3) in this
case will make the UART console garbled.

CC: Greg Kroah-Hartman <greg@kroah.com>
CC: David Woodhouse <dwmw2@infradead.org>
CC: linux-kernel@vger.kernel.org
CC: stable@kernel.org
Signed-off-by: Yin Kangkai <kangkai.yin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/tty/serial/8250.c