summaryrefslogtreecommitdiff
path: root/drivers/spi/spi-uniphier.c
diff options
context:
space:
mode:
authorKeiji Hayashibara <hayashibara.keiji@socionext.com>2019-06-26 03:41:47 +0300
committerMark Brown <broonie@kernel.org>2019-06-26 14:30:37 +0300
commite4671df0bfd67d4864de014fa1751d5e2a56c7a6 (patch)
treedff190447f929e0aacd0c12ad1e428162ebae015 /drivers/spi/spi-uniphier.c
parent94613d5ae1091a28b33f38e18d96e8d953ac18df (diff)
downloadlinux-e4671df0bfd67d4864de014fa1751d5e2a56c7a6.tar.xz
spi: uniphier: fix timeout error
Timeout error was silently ignored. This commit adds timeout error handling and modifies return type of wait_for_completion_timeout(). Signed-off-by: Keiji Hayashibara <hayashibara.keiji@socionext.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers/spi/spi-uniphier.c')
-rw-r--r--drivers/spi/spi-uniphier.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/spi/spi-uniphier.c b/drivers/spi/spi-uniphier.c
index 5a6137fe172d..c3c35c041ef1 100644
--- a/drivers/spi/spi-uniphier.c
+++ b/drivers/spi/spi-uniphier.c
@@ -328,7 +328,8 @@ static int uniphier_spi_transfer_one(struct spi_master *master,
struct spi_transfer *t)
{
struct uniphier_spi_priv *priv = spi_master_get_devdata(master);
- int status;
+ struct device *dev = master->dev.parent;
+ unsigned long time_left;
uniphier_spi_setup_transfer(spi, t);
@@ -338,13 +339,15 @@ static int uniphier_spi_transfer_one(struct spi_master *master,
uniphier_spi_irq_enable(spi, SSI_IE_RCIE | SSI_IE_RORIE);
- status = wait_for_completion_timeout(&priv->xfer_done,
- msecs_to_jiffies(SSI_TIMEOUT_MS));
+ time_left = wait_for_completion_timeout(&priv->xfer_done,
+ msecs_to_jiffies(SSI_TIMEOUT_MS));
uniphier_spi_irq_disable(spi, SSI_IE_RCIE | SSI_IE_RORIE);
- if (status < 0)
- return status;
+ if (!time_left) {
+ dev_err(dev, "transfer timeout.\n");
+ return -ETIMEDOUT;
+ }
return priv->error;
}