Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-serial
* 'devel' of master.kernel.org:/home/rmk/linux-2.6-serial: (21 commits) [SERIAL] add PNP IDs for FPI based touchscreens [SERIAL] Magic SysRq SAK does nothing on serial consoles [SERIAL] tickle NMI watchdog on serial output. [SERIAL] Fix oops when removing suspended serial port [SERIAL] Fix resume handling bug [SERIAL] Remove wrong asm/serial.h inclusions [SERIAL] CONFIG_PM=n slim: drivers/serial/8250_pci.c [SERIAL] OMAP1510 serial fix for 115200 baud [SERIAL] returning proper error from serial core driver [SERIAL] Make uart_line_info() correctly tell MMIO from I/O port [SERIAL] suspend/resume handlers don't have level arg anymore [SERIAL] 8250 resourse management fixes [SERIAL] serial_cs: Add quirk for brainboxes 2-port RS232 card [SERIAL] serial_cs: handle Nokia multi->single port bodge via config quirk [SERIAL] serial_cs: add configuration quirk [SERIAL] serial_cs: Convert Oxford 950 / Possio GCC wakeup quirk [SERIAL] serial_cs: convert IBM post-init handling to a quirk [SERIAL] serial_cs: allow wildcarded quirks [SERIAL] serial_cs: convert multi-port table to quirk table [SERIAL] serial_cs: Use clean up multiport card detection ...
This commit is contained in:
@ -792,6 +792,7 @@ static int uart_set_info(struct uart_state *state,
|
||||
* We failed anyway.
|
||||
*/
|
||||
retval = -EBUSY;
|
||||
goto exit; // Added to return the correct error -Ram Gupta
|
||||
}
|
||||
}
|
||||
|
||||
@ -1662,16 +1663,16 @@ static int uart_line_info(char *buf, struct uart_driver *drv, int i)
|
||||
struct uart_port *port = state->port;
|
||||
char stat_buf[32];
|
||||
unsigned int status;
|
||||
int ret;
|
||||
int mmio, ret;
|
||||
|
||||
if (!port)
|
||||
return 0;
|
||||
|
||||
mmio = port->iotype >= UPIO_MEM;
|
||||
ret = sprintf(buf, "%d: uart:%s %s%08lX irq:%d",
|
||||
port->line, uart_type(port),
|
||||
port->iotype == UPIO_MEM ? "mmio:0x" : "port:",
|
||||
port->iotype == UPIO_MEM ? port->mapbase :
|
||||
(unsigned long) port->iobase,
|
||||
mmio ? "mmio:0x" : "port:",
|
||||
mmio ? port->mapbase : (unsigned long) port->iobase,
|
||||
port->irq);
|
||||
|
||||
if (port->type == PORT_UNKNOWN) {
|
||||
@ -1939,6 +1940,9 @@ int uart_suspend_port(struct uart_driver *drv, struct uart_port *port)
|
||||
if (state->info && state->info->flags & UIF_INITIALIZED) {
|
||||
const struct uart_ops *ops = port->ops;
|
||||
|
||||
state->info->flags = (state->info->flags & ~UIF_INITIALIZED)
|
||||
| UIF_SUSPENDED;
|
||||
|
||||
spin_lock_irq(&port->lock);
|
||||
ops->stop_tx(port);
|
||||
ops->set_mctrl(port, 0);
|
||||
@ -2005,7 +2009,7 @@ int uart_resume_port(struct uart_driver *drv, struct uart_port *port)
|
||||
console_start(port->cons);
|
||||
}
|
||||
|
||||
if (state->info && state->info->flags & UIF_INITIALIZED) {
|
||||
if (state->info && state->info->flags & UIF_SUSPENDED) {
|
||||
const struct uart_ops *ops = port->ops;
|
||||
int ret;
|
||||
|
||||
@ -2017,15 +2021,17 @@ int uart_resume_port(struct uart_driver *drv, struct uart_port *port)
|
||||
ops->set_mctrl(port, port->mctrl);
|
||||
ops->start_tx(port);
|
||||
spin_unlock_irq(&port->lock);
|
||||
state->info->flags |= UIF_INITIALIZED;
|
||||
} else {
|
||||
/*
|
||||
* Failed to resume - maybe hardware went away?
|
||||
* Clear the "initialized" flag so we won't try
|
||||
* to call the low level drivers shutdown method.
|
||||
*/
|
||||
state->info->flags &= ~UIF_INITIALIZED;
|
||||
uart_shutdown(state);
|
||||
}
|
||||
|
||||
state->info->flags &= ~UIF_SUSPENDED;
|
||||
}
|
||||
|
||||
mutex_unlock(&state->mutex);
|
||||
|
Reference in New Issue
Block a user