Commit a1c178e4 authored by Mario Six's avatar Mario Six Committed by Jagan Teki

spi: mpc8xxx: Re-order transfer setup

Minize the time the adapter is disabled (via SPI_MODE_EN
clearing/setting) to just the character length setting, and only set up
the temporary data writing variable right before we need it, so there is
a more clear distinction between setting up the SPI adapter, and setting
up the data to be written.
Signed-off-by: Mario Six's avatarMario Six <mario.six@gdsys.cc>
Acked-by: Jagan Teki's avatarJagan Teki <jagan@amarulasolutions.com>
parent 85fa2655
......@@ -116,9 +116,6 @@ int spi_xfer(struct spi_slave *slave, uint bitlen, const void *dout, void *din,
u32 tmpdout = 0;
uchar xfer_bitlen = (bitlen >= 32 ? 32 : bitlen);
/* Shift data so it's msb-justified */
tmpdout = *(u32 *)dout >> (32 - xfer_bitlen);
clrbits_be32(&spi->mode, SPI_MODE_EN);
/* Set up length for this transfer */
......@@ -130,14 +127,17 @@ int spi_xfer(struct spi_slave *slave, uint bitlen, const void *dout, void *din,
else /* more than 16 bits -> full 32 bit transfer */
set_char_len(spi, 0);
setbits_be32(&spi->mode, SPI_MODE_EN);
/* Shift data so it's msb-justified */
tmpdout = *(u32 *)dout >> (32 - xfer_bitlen);
if (bitlen > 16) {
/* Set up the next iteration if sending > 32 bits */
bitlen -= 32;
dout += 4;
}
setbits_be32(&spi->mode, SPI_MODE_EN);
/* Write the data out */
out_be32(&spi->tx, tmpdout);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment