]> git.sur5r.net Git - u-boot/commitdiff
DW SPI: fix transmit only mode
authorEugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
Thu, 22 Mar 2018 10:50:44 +0000 (13:50 +0300)
committerJagan Teki <jagan@amarulasolutions.com>
Thu, 22 Mar 2018 17:31:35 +0000 (23:01 +0530)
In current implementation we get -ETIMEDOUT error when we try to use
transmit only mode (SPI_TMOD_TO)
This happens because in transmit only mode input FIFO never gets any data
which breaks our logic in dw_reader(): we are waiting until RX data will be
ready in dw_reader, but this newer happens, so we return with error.

Fix that by using SPI_TMOD_TR instead of SPI_TMOD_TO which allows to use
RX FIFO.

Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
Reviewed-by: Jagan Teki <jagan@openedev.com>
drivers/spi/designware_spi.c

index 5e196b21c9c25a28b651eb57bf38000b1cf93a4a..3296441606f6d1bcb7ed346e5f93fc82b4bf1912 100644 (file)
@@ -361,7 +361,11 @@ static int dw_spi_xfer(struct udevice *dev, unsigned int bitlen,
        else if (rx)
                priv->tmode = SPI_TMOD_RO;
        else
-               priv->tmode = SPI_TMOD_TO;
+               /*
+                * In transmit only mode (SPI_TMOD_TO) input FIFO never gets
+                * any data which breaks our logic in poll_transfer() above.
+                */
+               priv->tmode = SPI_TMOD_TR;
 
        cr0 &= ~SPI_TMOD_MASK;
        cr0 |= (priv->tmode << SPI_TMOD_OFFSET);