aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/spi/spi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/spi/spi.c')
-rw-r--r--drivers/spi/spi.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index f996c600eb8c..163fd802b7ac 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -543,17 +543,16 @@ static void spi_pump_messages(struct kthread_work *work)
543 /* Lock queue and check for queue work */ 543 /* Lock queue and check for queue work */
544 spin_lock_irqsave(&master->queue_lock, flags); 544 spin_lock_irqsave(&master->queue_lock, flags);
545 if (list_empty(&master->queue) || !master->running) { 545 if (list_empty(&master->queue) || !master->running) {
546 if (master->busy && master->unprepare_transfer_hardware) { 546 if (!master->busy) {
547 ret = master->unprepare_transfer_hardware(master); 547 spin_unlock_irqrestore(&master->queue_lock, flags);
548 if (ret) { 548 return;
549 spin_unlock_irqrestore(&master->queue_lock, flags);
550 dev_err(&master->dev,
551 "failed to unprepare transfer hardware\n");
552 return;
553 }
554 } 549 }
555 master->busy = false; 550 master->busy = false;
556 spin_unlock_irqrestore(&master->queue_lock, flags); 551 spin_unlock_irqrestore(&master->queue_lock, flags);
552 if (master->unprepare_transfer_hardware &&
553 master->unprepare_transfer_hardware(master))
554 dev_err(&master->dev,
555 "failed to unprepare transfer hardware\n");
557 return; 556 return;
558 } 557 }
559 558
@@ -984,7 +983,7 @@ static void acpi_register_spi_devices(struct spi_master *master)
984 acpi_status status; 983 acpi_status status;
985 acpi_handle handle; 984 acpi_handle handle;
986 985
987 handle = ACPI_HANDLE(&master->dev); 986 handle = ACPI_HANDLE(master->dev.parent);
988 if (!handle) 987 if (!handle)
989 return; 988 return;
990 989
@@ -1377,6 +1376,14 @@ static int __spi_async(struct spi_device *spi, struct spi_message *message)
1377 xfer->bits_per_word = spi->bits_per_word; 1376 xfer->bits_per_word = spi->bits_per_word;
1378 if (!xfer->speed_hz) 1377 if (!xfer->speed_hz)
1379 xfer->speed_hz = spi->max_speed_hz; 1378 xfer->speed_hz = spi->max_speed_hz;
1379 if (master->bits_per_word_mask) {
1380 /* Only 32 bits fit in the mask */
1381 if (xfer->bits_per_word > 32)
1382 return -EINVAL;
1383 if (!(master->bits_per_word_mask &
1384 BIT(xfer->bits_per_word - 1)))
1385 return -EINVAL;
1386 }
1380 } 1387 }
1381 1388
1382 message->spi = spi; 1389 message->spi = spi;