spi: soft_spi: Support NULL din/dout buffers
PATCH 1/1 spi: soft_spi: Support NULL din/dout buffers
This mirrors the conventions used in other SPI drivers (kirkwood, davinci, atmel, et al) where the din/dout buffer can be NULL when the received/transmitted data isn't important. This reduces the need for allocating additional buffers when write-only/read-only functionality is needed.
In the din == NULL case, the received data is simply not stored. In the dout == NULL case, zeroes are transmitted.
--- drivers/spi/soft_spi.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-)
drivers/spi/soft_spi.c +13 -5
@@ -137,9 +137,15 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen,* Check if it is time to work on a new byte. */ if ((j %8 ) ==0 ) { - tmpdout = *txd++; +if (txd) { + tmpdout = *txd++; + }else { + tmpdout =0 ; + }if (j !=0 ) { - *rxd++ = tmpdin; +if (rxd) { + *rxd++ = tmpdin; + } } tmpdin =0 ; }
@@ -164,9 +170,11 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen,* bits over to left-justify them. Then store the last byte * read in. */ -if ((bitlen %8 ) !=0 ) - tmpdin <<=8 - (bitlen %8 ); - *rxd++ = tmpdin; +if (rxd) { +if ((bitlen %8 ) !=0 ) + tmpdin <<=8 - (bitlen %8 ); + *rxd++ = tmpdin; + }if (flags &SPI_XFER_END )spi_cs_deactivate (slave);
Signature · 1 line
1.8.4.rc3
PATCH 1/1 spi: soft_spi: Support NULL din/dout buffers
Hi Andrew Ruder,
Quoted 42 lines · Andrew Ruder
This mirrors the conventions used in other SPI drivers (kirkwood, davinci, atmel, et al) where the din/dout buffer can be NULL when the received/transmitted data isn't important. This reduces the need for allocating additional buffers when write-only/read-only functionality is needed.
In the din == NULL case, the received data is simply not stored. In the dout == NULL case, zeroes are transmitted.
Signed-off-by Andrew Ruder <[email protected]>--- drivers/spi/soft_spi.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-)drivers/spi/soft_spi.c +8
-4@@ -137,9 +137,15 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen,* Check if it is time to work on a new byte. */ if ((j %8 ) ==0 ) { - tmpdout = *txd++; +if (txd) { + tmpdout = *txd++; + }else { + tmpdout =0 ; + }if (j !=0 ) { - *rxd++ = tmpdin; +if (rxd) { + *rxd++ = tmpdin; + } } tmpdin =0 ; }@@ -164,9 +170,11 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen,* bits over to left-justify them. Then store the last byte * read in. */ -if ((bitlen %8 ) !=0 ) - tmpdin <<=8 - (bitlen %8 );
drivers/spi/soft_spi.c int spi_xfer(struct spi_slave *slave, unsigned int bitlen,
Quoted 10 lines
drivers/spi/soft_spi.c +5
-2- *rxd++ = tmpdin; +if (rxd) { +if ((bitlen %8 ) !=0 ) + tmpdin <<=8 - (bitlen %8 ); + *rxd++ = tmpdin; + }if (flags &SPI_XFER_END )spi_cs_deactivate (slave); --
I'm not sure does this NULL buf config stuff will works all boards as you listed.
I guess ie the reason the earlier code doesn't have this.
Does this tested on your board? any possibility to test others too.
Jean-Christophe, any comments here!
Signature · 2 lines
Thanks, Jagan.