diff --git a/asoc/codecs/wcd-spi.c b/asoc/codecs/wcd-spi.c index 0173e151cbb8..4c7a85338ed4 100644 --- a/asoc/codecs/wcd-spi.c +++ b/asoc/codecs/wcd-spi.c @@ -815,6 +815,15 @@ static int __wcd_spi_data_xfer(struct spi_device *spi, return -EINVAL; } + WCD_SPI_MUTEX_LOCK(spi, wcd_spi->clk_mutex); + if (wcd_spi_is_suspended(wcd_spi)) { + dev_dbg(&spi->dev, + "%s: SPI suspended, cannot perform transfer\n", + __func__); + ret = -EIO; + goto done; + } + WCD_SPI_MUTEX_LOCK(spi, wcd_spi->xfer_mutex); if (msg->len == WCD_SPI_WORD_BYTE_CNT) { if (xfer_req == WCD_SPI_XFER_WRITE) @@ -827,7 +836,8 @@ static int __wcd_spi_data_xfer(struct spi_device *spi, ret = wcd_spi_transfer_split(spi, msg, xfer_req); } WCD_SPI_MUTEX_UNLOCK(spi, wcd_spi->xfer_mutex); - +done: + WCD_SPI_MUTEX_UNLOCK(spi, wcd_spi->clk_mutex); return ret; }