Commit 0b73aa63 authored by Mark Brown's avatar Mark Brown

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: default avatarGerhard Sittig <gsi@denx.de>
Signed-off-by: default avatarMark Brown <broonie@linaro.org>
parent 38dbfb59
...@@ -591,7 +591,6 @@ static int spi_transfer_one_message(struct spi_master *master, ...@@ -591,7 +591,6 @@ static int spi_transfer_one_message(struct spi_master *master,
struct spi_message *msg) struct spi_message *msg)
{ {
struct spi_transfer *xfer; struct spi_transfer *xfer;
bool cur_cs = true;
bool keep_cs = false; bool keep_cs = false;
int ret = 0; int ret = 0;
...@@ -627,8 +626,9 @@ static int spi_transfer_one_message(struct spi_master *master, ...@@ -627,8 +626,9 @@ static int spi_transfer_one_message(struct spi_master *master,
&msg->transfers)) { &msg->transfers)) {
keep_cs = true; keep_cs = true;
} else { } else {
cur_cs = !cur_cs; spi_set_cs(msg->spi, false);
spi_set_cs(msg->spi, cur_cs); udelay(10);
spi_set_cs(msg->spi, true);
} }
} }
......
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