From ece03db86316289aaed1383bff9e492cb7ef17ef Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Thu, 17 May 2007 14:27:39 +0800 Subject: [PATCH] --- yaml --- r: 56539 b: refs/heads/master c: b5b82df6f461e66af821bff5b51f336af92d96b6 h: refs/heads/master i: 56537: 3ebbf96827f7ebc5fbb6c017c83da50b7240bc88 56535: 8e07c4b04fffa38f99c6179566c4fdc724ad8822 v: v3 --- [refs] | 2 +- trunk/drivers/serial/8250.c | 21 ++++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 830fa37a68ec..4e56b3734054 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c97a9e10eaee328e6eea9f76acf7bacd7d48ef56 +refs/heads/master: b5b82df6f461e66af821bff5b51f336af92d96b6 diff --git a/trunk/drivers/serial/8250.c b/trunk/drivers/serial/8250.c index 48e259a0167d..c84dab083a85 100644 --- a/trunk/drivers/serial/8250.c +++ b/trunk/drivers/serial/8250.c @@ -894,7 +894,7 @@ static void autoconfig_16550a(struct uart_8250_port *up) quot = serial_dl_read(up); quot <<= 3; - status1 = serial_in(up, 0x04); /* EXCR1 */ + status1 = serial_in(up, 0x04); /* EXCR2 */ status1 &= ~0xB0; /* Disable LOCK, mask out PRESL[01] */ status1 |= 0x10; /* 1.625 divisor for baud_base --> 921600 */ serial_outp(up, 0x04, status1); @@ -2617,7 +2617,22 @@ void serial8250_suspend_port(int line) */ void serial8250_resume_port(int line) { - uart_resume_port(&serial8250_reg, &serial8250_ports[line].port); + struct uart_8250_port *up = &serial8250_ports[line]; + + if (up->capabilities & UART_NATSEMI) { + unsigned char tmp; + + /* Ensure it's still in high speed mode */ + serial_outp(up, UART_LCR, 0xE0); + + tmp = serial_in(up, 0x04); /* EXCR2 */ + tmp &= ~0xB0; /* Disable LOCK, mask out PRESL[01] */ + tmp |= 0x10; /* 1.625 divisor for baud_base --> 921600 */ + serial_outp(up, 0x04, tmp); + + serial_outp(up, UART_LCR, 0); + } + uart_resume_port(&serial8250_reg, &up->port); } /* @@ -2694,7 +2709,7 @@ static int serial8250_resume(struct platform_device *dev) struct uart_8250_port *up = &serial8250_ports[i]; if (up->port.type != PORT_UNKNOWN && up->port.dev == &dev->dev) - uart_resume_port(&serial8250_reg, &up->port); + serial8250_resume_port(i); } return 0;