diff options
Diffstat (limited to 'drivers/serial/serial_core.c')
-rw-r--r-- | drivers/serial/serial_core.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c index eab032733790..c9b64e73c987 100644 --- a/drivers/serial/serial_core.c +++ b/drivers/serial/serial_core.c | |||
@@ -1165,6 +1165,15 @@ out: | |||
1165 | return ret; | 1165 | return ret; |
1166 | } | 1166 | } |
1167 | 1167 | ||
1168 | static void uart_set_ldisc(struct tty_struct *tty) | ||
1169 | { | ||
1170 | struct uart_state *state = tty->driver_data; | ||
1171 | struct uart_port *port = state->port; | ||
1172 | |||
1173 | if (port->ops->set_ldisc) | ||
1174 | port->ops->set_ldisc(port); | ||
1175 | } | ||
1176 | |||
1168 | static void uart_set_termios(struct tty_struct *tty, | 1177 | static void uart_set_termios(struct tty_struct *tty, |
1169 | struct ktermios *old_termios) | 1178 | struct ktermios *old_termios) |
1170 | { | 1179 | { |
@@ -2054,6 +2063,8 @@ int uart_suspend_port(struct uart_driver *drv, struct uart_port *port) | |||
2054 | int uart_resume_port(struct uart_driver *drv, struct uart_port *port) | 2063 | int uart_resume_port(struct uart_driver *drv, struct uart_port *port) |
2055 | { | 2064 | { |
2056 | struct uart_state *state = drv->state + port->line; | 2065 | struct uart_state *state = drv->state + port->line; |
2066 | struct device *tty_dev; | ||
2067 | struct uart_match match = {port, drv}; | ||
2057 | 2068 | ||
2058 | mutex_lock(&state->mutex); | 2069 | mutex_lock(&state->mutex); |
2059 | 2070 | ||
@@ -2063,7 +2074,8 @@ int uart_resume_port(struct uart_driver *drv, struct uart_port *port) | |||
2063 | return 0; | 2074 | return 0; |
2064 | } | 2075 | } |
2065 | 2076 | ||
2066 | if (!port->suspended) { | 2077 | tty_dev = device_find_child(port->dev, &match, serial_match_port); |
2078 | if (!port->suspended && device_may_wakeup(tty_dev)) { | ||
2067 | disable_irq_wake(port->irq); | 2079 | disable_irq_wake(port->irq); |
2068 | mutex_unlock(&state->mutex); | 2080 | mutex_unlock(&state->mutex); |
2069 | return 0; | 2081 | return 0; |
@@ -2285,6 +2297,7 @@ static const struct tty_operations uart_ops = { | |||
2285 | .unthrottle = uart_unthrottle, | 2297 | .unthrottle = uart_unthrottle, |
2286 | .send_xchar = uart_send_xchar, | 2298 | .send_xchar = uart_send_xchar, |
2287 | .set_termios = uart_set_termios, | 2299 | .set_termios = uart_set_termios, |
2300 | .set_ldisc = uart_set_ldisc, | ||
2288 | .stop = uart_stop, | 2301 | .stop = uart_stop, |
2289 | .start = uart_start, | 2302 | .start = uart_start, |
2290 | .hangup = uart_hangup, | 2303 | .hangup = uart_hangup, |