|
@@ -154,12 +154,6 @@ struct uart_8250_port {
|
|
unsigned char lsr_saved_flags;
|
|
unsigned char lsr_saved_flags;
|
|
#define MSR_SAVE_FLAGS UART_MSR_ANY_DELTA
|
|
#define MSR_SAVE_FLAGS UART_MSR_ANY_DELTA
|
|
unsigned char msr_saved_flags;
|
|
unsigned char msr_saved_flags;
|
|
-
|
|
|
|
- /*
|
|
|
|
- * We provide a per-port pm hook.
|
|
|
|
- */
|
|
|
|
- void (*pm)(struct uart_port *port,
|
|
|
|
- unsigned int state, unsigned int old);
|
|
|
|
};
|
|
};
|
|
|
|
|
|
struct irq_info {
|
|
struct irq_info {
|
|
@@ -2436,16 +2430,24 @@ serial8250_set_ldisc(struct uart_port *port, int new)
|
|
port->flags &= ~UPF_HARDPPS_CD;
|
|
port->flags &= ~UPF_HARDPPS_CD;
|
|
}
|
|
}
|
|
|
|
|
|
-static void
|
|
|
|
-serial8250_pm(struct uart_port *port, unsigned int state,
|
|
|
|
- unsigned int oldstate)
|
|
|
|
|
|
+
|
|
|
|
+void serial8250_do_pm(struct uart_port *port, unsigned int state,
|
|
|
|
+ unsigned int oldstate)
|
|
{
|
|
{
|
|
struct uart_8250_port *p = (struct uart_8250_port *)port;
|
|
struct uart_8250_port *p = (struct uart_8250_port *)port;
|
|
|
|
|
|
serial8250_set_sleep(p, state != 0);
|
|
serial8250_set_sleep(p, state != 0);
|
|
|
|
+}
|
|
|
|
+EXPORT_SYMBOL(serial8250_do_pm);
|
|
|
|
|
|
- if (p->pm)
|
|
|
|
- p->pm(port, state, oldstate);
|
|
|
|
|
|
+static void
|
|
|
|
+serial8250_pm(struct uart_port *port, unsigned int state,
|
|
|
|
+ unsigned int oldstate)
|
|
|
|
+{
|
|
|
|
+ if (port->pm)
|
|
|
|
+ port->pm(port, state, oldstate);
|
|
|
|
+ else
|
|
|
|
+ serial8250_do_pm(port, state, oldstate);
|
|
}
|
|
}
|
|
|
|
|
|
static unsigned int serial8250_port_size(struct uart_8250_port *pt)
|
|
static unsigned int serial8250_port_size(struct uart_8250_port *pt)
|
|
@@ -3006,6 +3008,7 @@ static int __devinit serial8250_probe(struct platform_device *dev)
|
|
port.serial_in = p->serial_in;
|
|
port.serial_in = p->serial_in;
|
|
port.serial_out = p->serial_out;
|
|
port.serial_out = p->serial_out;
|
|
port.set_termios = p->set_termios;
|
|
port.set_termios = p->set_termios;
|
|
|
|
+ port.pm = p->pm;
|
|
port.dev = &dev->dev;
|
|
port.dev = &dev->dev;
|
|
port.irqflags |= irqflag;
|
|
port.irqflags |= irqflag;
|
|
ret = serial8250_register_port(&port);
|
|
ret = serial8250_register_port(&port);
|
|
@@ -3172,6 +3175,8 @@ int serial8250_register_port(struct uart_port *port)
|
|
/* Possibly override set_termios call */
|
|
/* Possibly override set_termios call */
|
|
if (port->set_termios)
|
|
if (port->set_termios)
|
|
uart->port.set_termios = port->set_termios;
|
|
uart->port.set_termios = port->set_termios;
|
|
|
|
+ if (port->pm)
|
|
|
|
+ uart->port.pm = port->pm;
|
|
|
|
|
|
ret = uart_add_one_port(&serial8250_reg, &uart->port);
|
|
ret = uart_add_one_port(&serial8250_reg, &uart->port);
|
|
if (ret == 0)
|
|
if (ret == 0)
|