diff options
author | Mark Brown <broonie@kernel.org> | 2023-01-30 13:47:16 +0300 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2023-01-30 13:47:16 +0300 |
commit | 35bba23e6732a593722c96cbe03ced627f0d8831 (patch) | |
tree | a410d820f60f6ddcdd909604b56e70a37b5933a3 /drivers/spi/spidev.c | |
parent | 50028988403ab8e031093655af9c6919ecba3aa6 (diff) | |
parent | eede42c9459b58b71edc99303dad65216a655810 (diff) | |
download | linux-35bba23e6732a593722c96cbe03ced627f0d8831.tar.xz |
Merge remote-tracking branch 'spi/for-6.2' into spi-6.2
Diffstat (limited to 'drivers/spi/spidev.c')
-rw-r--r-- | drivers/spi/spidev.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c index 1935ca613447..3db94d1483ed 100644 --- a/drivers/spi/spidev.c +++ b/drivers/spi/spidev.c @@ -90,9 +90,21 @@ MODULE_PARM_DESC(bufsiz, "data bytes in biggest supported SPI message"); /*-------------------------------------------------------------------------*/ static ssize_t +spidev_sync_unlocked(struct spi_device *spi, struct spi_message *message) +{ + ssize_t status; + + status = spi_sync(spi, message); + if (status == 0) + status = message->actual_length; + + return status; +} + +static ssize_t spidev_sync(struct spidev_data *spidev, struct spi_message *message) { - int status; + ssize_t status; struct spi_device *spi; mutex_lock(&spidev->spi_lock); @@ -101,10 +113,9 @@ spidev_sync(struct spidev_data *spidev, struct spi_message *message) if (spi == NULL) status = -ESHUTDOWN; else - status = spi_sync(spi, message); + status = spidev_sync_unlocked(spi, message); - if (status == 0) - status = message->actual_length; + mutex_unlock(&spidev->spi_lock); mutex_unlock(&spidev->spi_lock); return status; @@ -294,7 +305,7 @@ static int spidev_message(struct spidev_data *spidev, spi_message_add_tail(k_tmp, &msg); } - status = spidev_sync(spidev, &msg); + status = spidev_sync_unlocked(spidev->spi, &msg); if (status < 0) goto done; |