diff options
author | Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> | 2018-03-22 13:50:44 +0300 |
---|---|---|
committer | Jagan Teki <jagan@amarulasolutions.com> | 2018-03-22 23:01:35 +0530 |
commit | fc282c7bcb6a622ce1a0cf82c55654dec5bcb0cd (patch) | |
tree | 0838cadd25803f9271dc6239a1c21404f221b62f /drivers/spi | |
parent | c6b4f031d96a4e1d59761b294829b058b098f3df (diff) | |
download | u-boot-fc282c7bcb6a622ce1a0cf82c55654dec5bcb0cd.tar.gz u-boot-fc282c7bcb6a622ce1a0cf82c55654dec5bcb0cd.tar.bz2 u-boot-fc282c7bcb6a622ce1a0cf82c55654dec5bcb0cd.zip |
DW SPI: fix transmit only mode
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>
Diffstat (limited to 'drivers/spi')
-rw-r--r-- | drivers/spi/designware_spi.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/spi/designware_spi.c b/drivers/spi/designware_spi.c index 5e196b21c9..3296441606 100644 --- a/drivers/spi/designware_spi.c +++ b/drivers/spi/designware_spi.c @@ -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); |