diff options
| -rw-r--r-- | drivers/spi/spi_qsd.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/spi/spi_qsd.c b/drivers/spi/spi_qsd.c index 7e51b48950d..308b840317f 100644 --- a/drivers/spi/spi_qsd.c +++ b/drivers/spi/spi_qsd.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2008-2013, The Linux Foundation. All rights reserved. +/* Copyright (c) 2008-2014, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -2223,6 +2223,10 @@ static int msm_spi_transfer_one_message(struct spi_master *master, mutex_lock(&dd->core_lock); + spin_lock_irqsave(&dd->queue_lock, flags); + dd->transfer_pending = 1; + dd->cur_msg = msg; + spin_unlock_irqrestore(&dd->queue_lock, flags); /* * Counter-part of system-suspend when runtime-pm is not enabled. * This way, resume can be left empty and device will be put in @@ -2231,16 +2235,12 @@ static int msm_spi_transfer_one_message(struct spi_master *master, if (!pm_runtime_enabled(dd->dev)) msm_spi_pm_resume_runtime(dd->dev); - if (!msm_spi_is_valid_state(dd)) { + if (dd->suspended || !msm_spi_is_valid_state(dd)) { dev_err(dd->dev, "%s: SPI operational state not valid\n", __func__); status_error = 1; } - spin_lock_irqsave(&dd->queue_lock, flags); - dd->transfer_pending = 1; - dd->cur_msg = msg; - spin_unlock_irqrestore(&dd->queue_lock, flags); if (status_error) dd->cur_msg->status = -EIO; |
