diff options
-rw-r--r-- | drivers/tty/serial/omap-serial.c | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c index d3fbb70a8e8a..b2043df42a4f 100644 --- a/drivers/tty/serial/omap-serial.c +++ b/drivers/tty/serial/omap-serial.c | |||
@@ -165,7 +165,8 @@ static void serial_omap_enable_ms(struct uart_port *port) | |||
165 | pm_runtime_get_sync(up->dev); | 165 | pm_runtime_get_sync(up->dev); |
166 | up->ier |= UART_IER_MSI; | 166 | up->ier |= UART_IER_MSI; |
167 | serial_out(up, UART_IER, up->ier); | 167 | serial_out(up, UART_IER, up->ier); |
168 | pm_runtime_put(up->dev); | 168 | pm_runtime_mark_last_busy(up->dev); |
169 | pm_runtime_put_autosuspend(up->dev); | ||
169 | } | 170 | } |
170 | 171 | ||
171 | static void serial_omap_stop_tx(struct uart_port *port) | 172 | static void serial_omap_stop_tx(struct uart_port *port) |
@@ -415,7 +416,8 @@ static unsigned int serial_omap_tx_empty(struct uart_port *port) | |||
415 | spin_lock_irqsave(&up->port.lock, flags); | 416 | spin_lock_irqsave(&up->port.lock, flags); |
416 | ret = serial_in(up, UART_LSR) & UART_LSR_TEMT ? TIOCSER_TEMT : 0; | 417 | ret = serial_in(up, UART_LSR) & UART_LSR_TEMT ? TIOCSER_TEMT : 0; |
417 | spin_unlock_irqrestore(&up->port.lock, flags); | 418 | spin_unlock_irqrestore(&up->port.lock, flags); |
418 | pm_runtime_put(up->dev); | 419 | pm_runtime_mark_last_busy(up->dev); |
420 | pm_runtime_put_autosuspend(up->dev); | ||
419 | return ret; | 421 | return ret; |
420 | } | 422 | } |
421 | 423 | ||
@@ -427,7 +429,8 @@ static unsigned int serial_omap_get_mctrl(struct uart_port *port) | |||
427 | 429 | ||
428 | pm_runtime_get_sync(up->dev); | 430 | pm_runtime_get_sync(up->dev); |
429 | status = check_modem_status(up); | 431 | status = check_modem_status(up); |
430 | pm_runtime_put(up->dev); | 432 | pm_runtime_mark_last_busy(up->dev); |
433 | pm_runtime_put_autosuspend(up->dev); | ||
431 | 434 | ||
432 | dev_dbg(up->port.dev, "serial_omap_get_mctrl+%d\n", up->port.line); | 435 | dev_dbg(up->port.dev, "serial_omap_get_mctrl+%d\n", up->port.line); |
433 | 436 | ||
@@ -463,7 +466,8 @@ static void serial_omap_set_mctrl(struct uart_port *port, unsigned int mctrl) | |||
463 | up->mcr = serial_in(up, UART_MCR); | 466 | up->mcr = serial_in(up, UART_MCR); |
464 | up->mcr |= mcr; | 467 | up->mcr |= mcr; |
465 | serial_out(up, UART_MCR, up->mcr); | 468 | serial_out(up, UART_MCR, up->mcr); |
466 | pm_runtime_put(up->dev); | 469 | pm_runtime_mark_last_busy(up->dev); |
470 | pm_runtime_put_autosuspend(up->dev); | ||
467 | 471 | ||
468 | if (gpio_is_valid(up->DTR_gpio) && | 472 | if (gpio_is_valid(up->DTR_gpio) && |
469 | !!(mctrl & TIOCM_DTR) != up->DTR_active) { | 473 | !!(mctrl & TIOCM_DTR) != up->DTR_active) { |
@@ -490,7 +494,8 @@ static void serial_omap_break_ctl(struct uart_port *port, int break_state) | |||
490 | up->lcr &= ~UART_LCR_SBC; | 494 | up->lcr &= ~UART_LCR_SBC; |
491 | serial_out(up, UART_LCR, up->lcr); | 495 | serial_out(up, UART_LCR, up->lcr); |
492 | spin_unlock_irqrestore(&up->port.lock, flags); | 496 | spin_unlock_irqrestore(&up->port.lock, flags); |
493 | pm_runtime_put(up->dev); | 497 | pm_runtime_mark_last_busy(up->dev); |
498 | pm_runtime_put_autosuspend(up->dev); | ||
494 | } | 499 | } |
495 | 500 | ||
496 | static int serial_omap_startup(struct uart_port *port) | 501 | static int serial_omap_startup(struct uart_port *port) |
@@ -588,7 +593,8 @@ static void serial_omap_shutdown(struct uart_port *port) | |||
588 | if (serial_in(up, UART_LSR) & UART_LSR_DR) | 593 | if (serial_in(up, UART_LSR) & UART_LSR_DR) |
589 | (void) serial_in(up, UART_RX); | 594 | (void) serial_in(up, UART_RX); |
590 | 595 | ||
591 | pm_runtime_put(up->dev); | 596 | pm_runtime_mark_last_busy(up->dev); |
597 | pm_runtime_put_autosuspend(up->dev); | ||
592 | free_irq(up->port.irq, up); | 598 | free_irq(up->port.irq, up); |
593 | } | 599 | } |
594 | 600 | ||
@@ -862,7 +868,8 @@ serial_omap_set_termios(struct uart_port *port, struct ktermios *termios, | |||
862 | serial_omap_configure_xonxoff(up, termios); | 868 | serial_omap_configure_xonxoff(up, termios); |
863 | 869 | ||
864 | spin_unlock_irqrestore(&up->port.lock, flags); | 870 | spin_unlock_irqrestore(&up->port.lock, flags); |
865 | pm_runtime_put(up->dev); | 871 | pm_runtime_mark_last_busy(up->dev); |
872 | pm_runtime_put_autosuspend(up->dev); | ||
866 | dev_dbg(up->port.dev, "serial_omap_set_termios+%d\n", up->port.line); | 873 | dev_dbg(up->port.dev, "serial_omap_set_termios+%d\n", up->port.line); |
867 | } | 874 | } |
868 | 875 | ||
@@ -893,7 +900,8 @@ serial_omap_pm(struct uart_port *port, unsigned int state, | |||
893 | pm_runtime_allow(up->dev); | 900 | pm_runtime_allow(up->dev); |
894 | } | 901 | } |
895 | 902 | ||
896 | pm_runtime_put(up->dev); | 903 | pm_runtime_mark_last_busy(up->dev); |
904 | pm_runtime_put_autosuspend(up->dev); | ||
897 | } | 905 | } |
898 | 906 | ||
899 | static void serial_omap_release_port(struct uart_port *port) | 907 | static void serial_omap_release_port(struct uart_port *port) |
@@ -975,7 +983,8 @@ static void serial_omap_poll_put_char(struct uart_port *port, unsigned char ch) | |||
975 | pm_runtime_get_sync(up->dev); | 983 | pm_runtime_get_sync(up->dev); |
976 | wait_for_xmitr(up); | 984 | wait_for_xmitr(up); |
977 | serial_out(up, UART_TX, ch); | 985 | serial_out(up, UART_TX, ch); |
978 | pm_runtime_put(up->dev); | 986 | pm_runtime_mark_last_busy(up->dev); |
987 | pm_runtime_put_autosuspend(up->dev); | ||
979 | } | 988 | } |
980 | 989 | ||
981 | static int serial_omap_poll_get_char(struct uart_port *port) | 990 | static int serial_omap_poll_get_char(struct uart_port *port) |
@@ -989,7 +998,8 @@ static int serial_omap_poll_get_char(struct uart_port *port) | |||
989 | return NO_POLL_CHAR; | 998 | return NO_POLL_CHAR; |
990 | 999 | ||
991 | status = serial_in(up, UART_RX); | 1000 | status = serial_in(up, UART_RX); |
992 | pm_runtime_put(up->dev); | 1001 | pm_runtime_mark_last_busy(up->dev); |
1002 | pm_runtime_put_autosuspend(up->dev); | ||
993 | return status; | 1003 | return status; |
994 | } | 1004 | } |
995 | 1005 | ||
@@ -1340,7 +1350,8 @@ static int serial_omap_probe(struct platform_device *pdev) | |||
1340 | if (ret != 0) | 1350 | if (ret != 0) |
1341 | goto err_add_port; | 1351 | goto err_add_port; |
1342 | 1352 | ||
1343 | pm_runtime_put(&pdev->dev); | 1353 | pm_runtime_mark_last_busy(up->dev); |
1354 | pm_runtime_put_autosuspend(up->dev); | ||
1344 | platform_set_drvdata(pdev, up); | 1355 | platform_set_drvdata(pdev, up); |
1345 | return 0; | 1356 | return 0; |
1346 | 1357 | ||