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. Signed-off-by: Andrew Ruder <andrew.ruder@elecsyscorp.com> Cc: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> Reviewed-by: Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
This commit is contained in:
parent
0472808608
commit
c1c0dd2644
|
@ -136,10 +136,14 @@ 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 ((j % 8) == 0) {
|
||||
if (txd)
|
||||
tmpdout = *txd++;
|
||||
else
|
||||
tmpdout = 0;
|
||||
if(j != 0) {
|
||||
*rxd++ = tmpdin;
|
||||
if (rxd)
|
||||
*rxd++ = tmpdin;
|
||||
}
|
||||
tmpdin = 0;
|
||||
}
|
||||
|
@ -164,9 +168,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);
|
||||
|
|
Loading…
Reference in New Issue