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.
|
* Check if it is time to work on a new byte.
|
||||||
*/
|
*/
|
||||||
if((j % 8) == 0) {
|
if ((j % 8) == 0) {
|
||||||
tmpdout = *txd++;
|
if (txd)
|
||||||
|
tmpdout = *txd++;
|
||||||
|
else
|
||||||
|
tmpdout = 0;
|
||||||
if(j != 0) {
|
if(j != 0) {
|
||||||
*rxd++ = tmpdin;
|
if (rxd)
|
||||||
|
*rxd++ = tmpdin;
|
||||||
}
|
}
|
||||||
tmpdin = 0;
|
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
|
* bits over to left-justify them. Then store the last byte
|
||||||
* read in.
|
* read in.
|
||||||
*/
|
*/
|
||||||
if((bitlen % 8) != 0)
|
if (rxd) {
|
||||||
tmpdin <<= 8 - (bitlen % 8);
|
if ((bitlen % 8) != 0)
|
||||||
*rxd++ = tmpdin;
|
tmpdin <<= 8 - (bitlen % 8);
|
||||||
|
*rxd++ = tmpdin;
|
||||||
|
}
|
||||||
|
|
||||||
if (flags & SPI_XFER_END)
|
if (flags & SPI_XFER_END)
|
||||||
spi_cs_deactivate(slave);
|
spi_cs_deactivate(slave);
|
||||||
|
|
Loading…
Reference in New Issue