diff options
| author | mattis fjallstrom <mattis@acm.org> | 2015-05-21 12:00:33 -0700 |
|---|---|---|
| committer | mattis fjallstrom <mattis@acm.org> | 2015-05-21 13:24:30 -0700 |
| commit | 7d990a059acf5eb46ae99c058fc9911cbdce131d (patch) | |
| tree | ac9531b3ff2b2670dabc84c248a1770c84109586 /drivers/tty/serial/omap-serial.c | |
| parent | e8980e2a6a7392ae5a1f882d1ba01e03ac83f899 (diff) | |
| parent | 89fdc2c4bb83fff36199cd883a27efb317f02037 (diff) | |
| download | olio-linux-3.10-mattis_dev.tar.xz olio-linux-3.10-mattis_dev.zip | |
Merge branch 'android-omap-minnow-3.10-lollipop-wear-release' of https://android.googlesource.com/kernel/omap into mattis_devmattis_dev
Change-Id: I46165dd7747b9b6289eb44cb96cbef2de46c10ba
Diffstat (limited to 'drivers/tty/serial/omap-serial.c')
| -rw-r--r-- | drivers/tty/serial/omap-serial.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c index 7d041f28cf2..3009a8909cc 100644 --- a/drivers/tty/serial/omap-serial.c +++ b/drivers/tty/serial/omap-serial.c @@ -172,6 +172,7 @@ struct uart_omap_port { struct pinctrl_state *pin_default; struct pinctrl_state *pin_idle; bool is_suspending; + spinlock_t delayed_rts_lock; /* protect need_delayed_rts*/ bool need_delayed_rts; bool in_transmit; int ext_rt_cnt; @@ -1372,12 +1373,16 @@ static int serial_omap_prepare(struct device *dev) static void serial_omap_complete(struct device *dev) { struct uart_omap_port *up = dev_get_drvdata(dev); + unsigned long flags; + + spin_lock_irqsave(&up->delayed_rts_lock, flags); if (up->need_delayed_rts && up->pin_default && up->pin_idle) { pinctrl_select_state(up->pins, up->pin_default); up->need_delayed_rts = 0; } up->is_suspending = false; + spin_unlock_irqrestore(&up->delayed_rts_lock, flags); } static int serial_omap_suspend(struct device *dev) @@ -1747,6 +1752,7 @@ static void serial_omap_restore_context(struct uart_omap_port *up) static int serial_omap_runtime_suspend(struct device *dev) { struct uart_omap_port *up = dev_get_drvdata(dev); + unsigned long flags; /* * When using 'no_console_suspend', the console UART must not be @@ -1762,8 +1768,10 @@ static int serial_omap_runtime_suspend(struct device *dev) return -EINVAL; if (up->pin_idle) { + spin_lock_irqsave(&up->delayed_rts_lock, flags); pinctrl_select_state(up->pins, up->pin_idle); up->need_delayed_rts = 0; + spin_unlock_irqrestore(&up->delayed_rts_lock, flags); } up->context_loss_cnt = serial_omap_get_context_loss_count(up); |