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...@intel.com>
---
 drivers/spi/spi-altera.c | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/drivers/spi/spi-altera.c b/drivers/spi/spi-altera.c
index 809bfff..cbc4c28 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)
-- 
2.7.4

Reply via email to