spi: dw: Fix driving MOSI low while recieving
authorSean Anderson <seanga2@gmail.com>
Fri, 16 Oct 2020 22:57:43 +0000 (18:57 -0400)
committerJagan Teki <jagan@amarulasolutions.com>
Fri, 18 Dec 2020 10:46:36 +0000 (16:16 +0530)
commitcaf110798ccca5d1fe7e75ae73397212262b9ee9
tree3b331ce93028eddc8aa843576d548a9c8df4b633
parent25f068aa3e8aebda96a1a908a0bebd56f59374ca
spi: dw: Fix driving MOSI low while recieving

The resting state of MOSI is high when nothing is driving it. If we drive
it low while recieving, it looks like we are transmitting 0x00 instead of
transmitting nothing. This can confuse slaves (like SD cards) which allow
new commands to be sent over MOSI while they are returning data over MISO.
The return of MOSI from 0 to 1 at the end of recieving a byte can look like
a start bit and a transmission bit to an SD card. This will cause the card
to become out-of-sync with the SPI device, as it thinks the device has
already started transmitting two bytes of a new command. The mmc-spi driver
will not detect the R1 response from the SD card, since it is sent too
early, and offset by two bits. This patch fixes transfer errors when using
SD cards with dw spi.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>
Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>
drivers/spi/designware_spi.c