diff options
author | Xu Yilun <yilun.xu@intel.com> | 2020-12-29 13:27:41 +0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2021-01-19 18:27:25 +0100 |
commit | 78755373aa48eb50367bcb674f99fdb79e236bff (patch) | |
tree | 7e98671f04bd25f51b4c8142cee7b8f161336f28 /drivers/spi/spi-altera.c | |
parent | 560e9b900e12781706b686e7aa40fb59c9fa5dcb (diff) | |
download | kernel_replicant_linux-78755373aa48eb50367bcb674f99fdb79e236bff.tar.gz kernel_replicant_linux-78755373aa48eb50367bcb674f99fdb79e236bff.tar.bz2 kernel_replicant_linux-78755373aa48eb50367bcb674f99fdb79e236bff.zip |
spi: altera: fix return value for altera_spi_txrx()
[ Upstream commit ede090f5a438e97d0586f64067bbb956e30a2a31 ]
This patch fixes the return value for altera_spi_txrx. It should return
1 for interrupt transfer mode, and return 0 for polling transfer mode.
The altera_spi_txrx() implements the spi_controller.transfer_one
callback. According to the spi-summary.rst, the transfer_one should
return 0 when transfer is finished, return 1 when transfer is still in
progress.
Signed-off-by: Xu Yilun <yilun.xu@intel.com>
Link: https://lore.kernel.org/r/1609219662-27057-2-git-send-email-yilun.xu@intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'drivers/spi/spi-altera.c')
-rw-r--r-- | drivers/spi/spi-altera.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/drivers/spi/spi-altera.c b/drivers/spi/spi-altera.c index 809bfff3690a..cbc4c28c1541 100644 --- a/drivers/spi/spi-altera.c +++ b/drivers/spi/spi-altera.c @@ -189,24 +189,26 @@ static int altera_spi_txrx(struct spi_master *master, /* send the first byte */ altera_spi_tx_word(hw); - } else { - while (hw->count < hw->len) { - altera_spi_tx_word(hw); - for (;;) { - altr_spi_readl(hw, ALTERA_SPI_STATUS, &val); - if (val & ALTERA_SPI_STATUS_RRDY_MSK) - break; + return 1; + } + + while (hw->count < hw->len) { + altera_spi_tx_word(hw); - cpu_relax(); - } + for (;;) { + altr_spi_readl(hw, ALTERA_SPI_STATUS, &val); + if (val & ALTERA_SPI_STATUS_RRDY_MSK) + break; - altera_spi_rx_word(hw); + cpu_relax(); } - spi_finalize_current_transfer(master); + + altera_spi_rx_word(hw); } + spi_finalize_current_transfer(master); - return t->len; + return 0; } static irqreturn_t altera_spi_irq(int irq, void *dev) |