summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAnatolij Gustschin <agust@denx.de>2013-03-13 14:57:43 +0100
committerMark Brown <broonie@opensource.wolfsonmicro.com>2013-04-01 14:30:26 +0100
commit1ad849aee5f53353ed88d9cd3d68a51b03a7d44f (patch)
treef76119f3243f3e778cb894b5f2dd0352fb623e91 /drivers
parentb0b36b861e434ee1c1a64cb39259e262f79af62e (diff)
downloadlinux-1ad849aee5f53353ed88d9cd3d68a51b03a7d44f.tar.gz
linux-1ad849aee5f53353ed88d9cd3d68a51b03a7d44f.tar.bz2
linux-1ad849aee5f53353ed88d9cd3d68a51b03a7d44f.zip
spi/mpc512x-psc: optionally keep PSC SS asserted across xfer segmensts
Some SPI slave devices require asserted chip select signal across multiple transfer segments of an SPI message. Currently the driver always de-asserts the internal SS signal for every single transfer segment of the message and ignores the 'cs_change' flag of the transfer description. Disable the internal chip select (SS) only if this is needed and indicated by the 'cs_change' flag. Without this change, each partial transfer of a surrounding multi-part SPI transaction might erroneously change the SS signal, which might prevent slaves from answering the request that was sent in a previous transfer segment because the transaction could be considered aborted (SS was de-asserted before reading the response). Reported-by: Gerhard Sittig <gerhard.sittig@ifm.com> Signed-off-by: Anatolij Gustschin <agust@denx.de> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Cc: stable@vger.kernel.org
Diffstat (limited to 'drivers')
-rw-r--r--drivers/spi/spi-mpc512x-psc.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/spi/spi-mpc512x-psc.c b/drivers/spi/spi-mpc512x-psc.c
index 89480b281d74..3e490ee7f275 100644
--- a/drivers/spi/spi-mpc512x-psc.c
+++ b/drivers/spi/spi-mpc512x-psc.c
@@ -164,7 +164,7 @@ static int mpc512x_psc_spi_transfer_rxtx(struct spi_device *spi,
for (i = count; i > 0; i--) {
data = tx_buf ? *tx_buf++ : 0;
- if (len == EOFBYTE)
+ if (len == EOFBYTE && t->cs_change)
setbits32(&fifo->txcmd, MPC512x_PSC_FIFO_EOF);
out_8(&fifo->txdata_8, data);
len--;