summaryrefslogtreecommitdiff
path: root/drivers/spi
diff options
context:
space:
mode:
authorMark Brown <broonie@linaro.org>2014-03-29 23:48:07 +0000
committerNitin Garg <nitin.garg@freescale.com>2015-09-17 09:20:38 -0500
commita3bf74b325f2610a3e13aa43bdf38f5de09e7a92 (patch)
tree794bf5c9c42014a6fac24eec76d45a8e51d12e05 /drivers/spi
parent50c332917b171deb3c98903a9e6d15eb60624e54 (diff)
spi: Fix handling of cs_change in core implementation
The core implementation of cs_change didn't follow the documentation which says that cs_change in the middle of the transfer means to briefly deassert chip select, instead it followed buggy drivers which change the polarity of chip select. Use a delay of 10us between deassert and reassert simply from pulling numbers out of a hat. Reported-by: Gerhard Sittig <gsi@denx.de> Signed-off-by: Mark Brown <broonie@linaro.org> (cherry picked from commit 0b73aa63c193006c3d503d4903dd4792a26e1d50) (cherry picked from commit f5ec8bd357c3f3fddb46a9bf17293cc6f77d2563)
Diffstat (limited to 'drivers/spi')
-rw-r--r--drivers/spi/spi.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index c34179d3b93b..e4e8f92d8592 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -759,7 +759,6 @@ static int spi_transfer_one_message(struct spi_master *master,
struct spi_message *msg)
{
struct spi_transfer *xfer;
- bool cur_cs = true;
bool keep_cs = false;
int ret = 0;
int ms = 1;
@@ -805,8 +804,9 @@ static int spi_transfer_one_message(struct spi_master *master,
&msg->transfers)) {
keep_cs = true;
} else {
- cur_cs = !cur_cs;
- spi_set_cs(msg->spi, cur_cs);
+ spi_set_cs(msg->spi, false);
+ udelay(10);
+ spi_set_cs(msg->spi, true);
}
}