Message ID | 20131023001117.GA22717@gmail.com |
---|---|
State | Superseded |
Delegated to: | Jagannadha Sutradharudu Teki |
Headers | show |
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!
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);
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(-)