Skip to content

Commit

Permalink
mpc52xx_psc_spi: fix block transfer
Browse files Browse the repository at this point in the history
The block transfer routine in the mpc52xx psc spi driver misinterpret
the datasheet.  According to the processor datasheet the chipselect is
held as long as the EOF is not written.

Theoretically blocks of any sizes can be transferred in this way.  The
old routine however writes an EOF after every word, which has the size
of size_of_word.  This makes the transfer slow.

Also fixed some duplicate code.

Signed-off-by: Luotao Fu <l.fu@pengutronix.de>
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Cc: <stable@kernel.org>		[2.6.25.x, 2.6.26.x]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Luotao Fu authored and Linus Torvalds committed Jul 28, 2008
1 parent 78a34ae commit 9a7867e
Showing 1 changed file with 7 additions and 15 deletions.
22 changes: 7 additions & 15 deletions drivers/spi/mpc52xx_psc_spi.c
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,6 @@ static int mpc52xx_psc_spi_transfer_rxtx(struct spi_device *spi,
unsigned rfalarm;
unsigned send_at_once = MPC52xx_PSC_BUFSIZE;
unsigned recv_at_once;
unsigned bpw = mps->bits_per_word / 8;

if (!t->tx_buf && !t->rx_buf && t->len)
return -EINVAL;
Expand All @@ -164,22 +163,15 @@ static int mpc52xx_psc_spi_transfer_rxtx(struct spi_device *spi,
}

dev_dbg(&spi->dev, "send %d bytes...\n", send_at_once);
if (tx_buf) {
for (; send_at_once; sb++, send_at_once--) {
/* set EOF flag */
if (mps->bits_per_word
&& (sb + 1) % bpw == 0)
out_8(&psc->ircr2, 0x01);
for (; send_at_once; sb++, send_at_once--) {
/* set EOF flag before the last word is sent */
if (send_at_once == 1)
out_8(&psc->ircr2, 0x01);

if (tx_buf)
out_8(&psc->mpc52xx_psc_buffer_8, tx_buf[sb]);
}
} else {
for (; send_at_once; sb++, send_at_once--) {
/* set EOF flag */
if (mps->bits_per_word
&& ((sb + 1) % bpw) == 0)
out_8(&psc->ircr2, 0x01);
else
out_8(&psc->mpc52xx_psc_buffer_8, 0);
}
}


Expand Down

0 comments on commit 9a7867e

Please sign in to comment.