|
@@ -142,6 +142,7 @@ static int mpc52xx_psc_spi_transfer_rxtx(struct spi_device *spi,
|
|
unsigned rfalarm;
|
|
unsigned rfalarm;
|
|
unsigned send_at_once = MPC52xx_PSC_BUFSIZE;
|
|
unsigned send_at_once = MPC52xx_PSC_BUFSIZE;
|
|
unsigned recv_at_once;
|
|
unsigned recv_at_once;
|
|
|
|
+ int last_block = 0;
|
|
|
|
|
|
if (!t->tx_buf && !t->rx_buf && t->len)
|
|
if (!t->tx_buf && !t->rx_buf && t->len)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
@@ -151,15 +152,17 @@ static int mpc52xx_psc_spi_transfer_rxtx(struct spi_device *spi,
|
|
while (rb < t->len) {
|
|
while (rb < t->len) {
|
|
if (t->len - rb > MPC52xx_PSC_BUFSIZE) {
|
|
if (t->len - rb > MPC52xx_PSC_BUFSIZE) {
|
|
rfalarm = MPC52xx_PSC_RFALARM;
|
|
rfalarm = MPC52xx_PSC_RFALARM;
|
|
|
|
+ last_block = 0;
|
|
} else {
|
|
} else {
|
|
send_at_once = t->len - sb;
|
|
send_at_once = t->len - sb;
|
|
rfalarm = MPC52xx_PSC_BUFSIZE - (t->len - rb);
|
|
rfalarm = MPC52xx_PSC_BUFSIZE - (t->len - rb);
|
|
|
|
+ last_block = 1;
|
|
}
|
|
}
|
|
|
|
|
|
dev_dbg(&spi->dev, "send %d bytes...\n", send_at_once);
|
|
dev_dbg(&spi->dev, "send %d bytes...\n", send_at_once);
|
|
for (; send_at_once; sb++, send_at_once--) {
|
|
for (; send_at_once; sb++, send_at_once--) {
|
|
/* set EOF flag before the last word is sent */
|
|
/* set EOF flag before the last word is sent */
|
|
- if (send_at_once == 1)
|
|
|
|
|
|
+ if (send_at_once == 1 && last_block)
|
|
out_8(&psc->ircr2, 0x01);
|
|
out_8(&psc->ircr2, 0x01);
|
|
|
|
|
|
if (tx_buf)
|
|
if (tx_buf)
|