
Hi Andrew Ruder,
On Wed, Oct 23, 2013 at 5:41 AM, Andrew Ruder andrew.ruder@elecsyscorp.com wrote:
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 andrew.ruder@elecsyscorp.com
drivers/spi/soft_spi.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/drivers/spi/soft_spi.c b/drivers/spi/soft_spi.c index 5d22351..5fdd091 100644 --- a/drivers/spi/soft_spi.c +++ b/drivers/spi/soft_spi.c @@ -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);
--
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!