spi: altera: Simplify altera_spi_txrx implementation for noirq case
This patch simplifies the code and makes it better in readability. Now the logic in the while loop is simply "write to ALTERA_SPI_TXDATA then read from ALTERA_SPI_TXDATA". There is a slightly logic change because now we avoid a read-write cycle when hw->len is 0. Since the code in bitbang library will call bitbang->txrx_bufs() only when t->len is not 0, this is not a problem. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Thomas Chou <thomas@wytron.com.tw> Signed-off-by: Mark Brown <broonie@linaro.org>
This commit is contained in:
parent
d8dfad3876
commit
72be0ee42e
|
@ -150,12 +150,12 @@ static int altera_spi_txrx(struct spi_device *spi, struct spi_transfer *t)
|
||||||
hw->imr &= ~ALTERA_SPI_CONTROL_IRRDY_MSK;
|
hw->imr &= ~ALTERA_SPI_CONTROL_IRRDY_MSK;
|
||||||
writel(hw->imr, hw->base + ALTERA_SPI_CONTROL);
|
writel(hw->imr, hw->base + ALTERA_SPI_CONTROL);
|
||||||
} else {
|
} else {
|
||||||
/* send the first byte */
|
while (hw->count < hw->len) {
|
||||||
writel(hw_txbyte(hw, 0), hw->base + ALTERA_SPI_TXDATA);
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
unsigned int rxd;
|
unsigned int rxd;
|
||||||
|
|
||||||
|
writel(hw_txbyte(hw, hw->count),
|
||||||
|
hw->base + ALTERA_SPI_TXDATA);
|
||||||
|
|
||||||
while (!(readl(hw->base + ALTERA_SPI_STATUS) &
|
while (!(readl(hw->base + ALTERA_SPI_STATUS) &
|
||||||
ALTERA_SPI_STATUS_RRDY_MSK))
|
ALTERA_SPI_STATUS_RRDY_MSK))
|
||||||
cpu_relax();
|
cpu_relax();
|
||||||
|
@ -174,14 +174,7 @@ static int altera_spi_txrx(struct spi_device *spi, struct spi_transfer *t)
|
||||||
}
|
}
|
||||||
|
|
||||||
hw->count++;
|
hw->count++;
|
||||||
|
|
||||||
if (hw->count < hw->len)
|
|
||||||
writel(hw_txbyte(hw, hw->count),
|
|
||||||
hw->base + ALTERA_SPI_TXDATA);
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return hw->count * hw->bytes_per_word;
|
return hw->count * hw->bytes_per_word;
|
||||||
|
|
Loading…
Reference in New Issue