Browse Source

spi/bitbang: initialize bits_per_word as specified by spi message

SPI protocol drivers can submit messages specifying needed bits_per_word
parameter for a message transfer. The bitbang driver currently ignores
bits_per_word given by a singe message and always uses master's
bits_per_word parameter. Only use master's bits_per_word when a
message didn't specify needed bits_per_word for ongoing transfer.

Signed-off-by: Anatolij Gustschin <agust@denx.de>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Anatolij Gustschin 14 years ago
parent
commit
8c99268431
1 changed files with 3 additions and 3 deletions
  1. 3 3
      drivers/spi/spi_bitbang.c

+ 3 - 3
drivers/spi/spi_bitbang.c

@@ -68,7 +68,7 @@ static unsigned bitbang_txrx_8(
 	unsigned		ns,
 	unsigned		ns,
 	struct spi_transfer	*t
 	struct spi_transfer	*t
 ) {
 ) {
-	unsigned		bits = spi->bits_per_word;
+	unsigned		bits = t->bits_per_word ? : spi->bits_per_word;
 	unsigned		count = t->len;
 	unsigned		count = t->len;
 	const u8		*tx = t->tx_buf;
 	const u8		*tx = t->tx_buf;
 	u8			*rx = t->rx_buf;
 	u8			*rx = t->rx_buf;
@@ -94,7 +94,7 @@ static unsigned bitbang_txrx_16(
 	unsigned		ns,
 	unsigned		ns,
 	struct spi_transfer	*t
 	struct spi_transfer	*t
 ) {
 ) {
-	unsigned		bits = spi->bits_per_word;
+	unsigned		bits = t->bits_per_word ? : spi->bits_per_word;
 	unsigned		count = t->len;
 	unsigned		count = t->len;
 	const u16		*tx = t->tx_buf;
 	const u16		*tx = t->tx_buf;
 	u16			*rx = t->rx_buf;
 	u16			*rx = t->rx_buf;
@@ -120,7 +120,7 @@ static unsigned bitbang_txrx_32(
 	unsigned		ns,
 	unsigned		ns,
 	struct spi_transfer	*t
 	struct spi_transfer	*t
 ) {
 ) {
-	unsigned		bits = spi->bits_per_word;
+	unsigned		bits = t->bits_per_word ? : spi->bits_per_word;
 	unsigned		count = t->len;
 	unsigned		count = t->len;
 	const u32		*tx = t->tx_buf;
 	const u32		*tx = t->tx_buf;
 	u32			*rx = t->rx_buf;
 	u32			*rx = t->rx_buf;