spi: simplify spi_write_then_read()
PATCH 1/1 spi: simplify spi_write_then_read()
From: Vernon Sauder <[email protected]>
Modify spi_write_then_read() to use one transfer. This speeds up all callers, and is a minor code shrink.
Signed-off-by Vernon Sauder <[email protected]>
Signed-off-by David Brownell <[email protected]>
--- drivers/spi/spi.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-)
drivers/spi/spi.c +8 -14
@@ -660,7 +660,7 @@ int spi_write_then_read(struct spi_devicint status;struct spi_message message; -struct spi_transfer x[2 ]; +struct spi_transfer x;u8 *local_buf;/* Use preallocated DMA-safe buffer. We can't avoid copying here,
@@ -671,15 +671,9 @@ int spi_write_then_read(struct spi_devicreturn -EINVAL ;spi_message_init (&message); -memset (x,0 ,sizeof x); -if (n_tx) { - x[0 ].len = n_tx; -spi_message_add_tail (&x[0 ], &message); - } -if (n_rx) { - x[1 ].len = n_rx; -spi_message_add_tail (&x[1 ], &message); - } +memset (&x,0 ,sizeof x); + x.len = n_tx + n_rx; +spi_message_add_tail (&x, &message);/* ... unless someone else is using the pre-allocated buffer */ if (!mutex_trylock (&lock)) {
@@ -690,15 +684,15 @@ int spi_write_then_read(struct spi_devic local_buf = buf;memcpy (local_buf, txbuf, n_tx); - x[0 ].tx_buf = local_buf; - x[1 ].rx_buf = local_buf + n_tx; + x.tx_buf = local_buf; + x.rx_buf = local_buf;/* do the i/o */ status =spi_sync (spi, &message);if (status ==0 ) -memcpy (rxbuf, x[1 ].rx_buf, n_rx); +memcpy (rxbuf, x.rx_buf + n_tx, n_rx); -if (x[0 ].tx_buf == buf) +if (x.tx_buf == buf)mutex_unlock (&lock);else kfree (local_buf);
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/