summaryrefslogtreecommitdiff
path: root/drivers/tty
diff options
context:
space:
mode:
authormattis fjallstrom <mattis@acm.org>2015-05-21 12:00:33 -0700
committermattis fjallstrom <mattis@acm.org>2015-05-21 13:24:30 -0700
commit7d990a059acf5eb46ae99c058fc9911cbdce131d (patch)
treeac9531b3ff2b2670dabc84c248a1770c84109586 /drivers/tty
parente8980e2a6a7392ae5a1f882d1ba01e03ac83f899 (diff)
parent89fdc2c4bb83fff36199cd883a27efb317f02037 (diff)
downloadolio-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')
-rw-r--r--drivers/tty/serial/omap-serial.c8
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);