浏览代码

spi_mpc83xx: hang fix

When the spi_mpc83xx driver receives a tx_buf pointer which is NULL, it
only writes one zero filled word to the transmit register.  If the driver
expects to receive more than one word it will wait forever for a second
receive interrupt.  With this patch the controller will shift out zeroes
until all words have been received.

Signed-off-by: Jan Andersson <jan@gaisler.com>
Tested-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Kumar Gala <galak@kernel.crashing.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Jan Andersson 17 年之前
父节点
当前提交
65e213cdb2
共有 1 个文件被更改,包括 2 次插入5 次删除
  1. 2 5
      drivers/spi/spi_mpc83xx.c

+ 2 - 5
drivers/spi/spi_mpc83xx.c

@@ -384,11 +384,8 @@ irqreturn_t mpc83xx_spi_irq(s32 irq, void *context_data)
 
 
 	mpc83xx_spi->count -= 1;
 	mpc83xx_spi->count -= 1;
 	if (mpc83xx_spi->count) {
 	if (mpc83xx_spi->count) {
-		if (mpc83xx_spi->tx) {
-			u32 word = mpc83xx_spi->get_tx(mpc83xx_spi);
-			mpc83xx_spi_write_reg(&mpc83xx_spi->base->transmit,
-					      word);
-		}
+		u32 word = mpc83xx_spi->get_tx(mpc83xx_spi);
+		mpc83xx_spi_write_reg(&mpc83xx_spi->base->transmit, word);
 	} else {
 	} else {
 		complete(&mpc83xx_spi->done);
 		complete(&mpc83xx_spi->done);
 	}
 	}