Commit 16a0ce4e authored by Mark Brown's avatar Mark Brown

spi: Add a timeout when waiting for transfers

Don't wait indefinitely for transfers to complete but time out after 10ms
more than we expect the transfer to take on the wire.
Signed-off-by: default avatarMark Brown <broonie@linaro.org>
parent 38dbfb59
...@@ -594,6 +594,7 @@ static int spi_transfer_one_message(struct spi_master *master, ...@@ -594,6 +594,7 @@ static int spi_transfer_one_message(struct spi_master *master,
bool cur_cs = true; bool cur_cs = true;
bool keep_cs = false; bool keep_cs = false;
int ret = 0; int ret = 0;
int ms = 1;
spi_set_cs(msg->spi, true); spi_set_cs(msg->spi, true);
...@@ -611,7 +612,16 @@ static int spi_transfer_one_message(struct spi_master *master, ...@@ -611,7 +612,16 @@ static int spi_transfer_one_message(struct spi_master *master,
if (ret > 0) { if (ret > 0) {
ret = 0; ret = 0;
wait_for_completion(&master->xfer_completion); ms = xfer->len * 8 * 1000 / xfer->speed_hz;
ms += 10; /* some tolerance */
ms = wait_for_completion_timeout(&master->xfer_completion,
msecs_to_jiffies(ms));
}
if (ms == 0) {
dev_err(&msg->spi->dev, "SPI transfer timed out\n");
msg->status = -ETIMEDOUT;
} }
trace_spi_transfer_stop(msg, xfer); trace_spi_transfer_stop(msg, xfer);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment