Commit fbddc989 authored by Serge Semin's avatar Serge Semin Committed by Mark Brown

spi: dw: De-assert chip-select on reset

SPI memory operations implementation will require to have the CS register
cleared before executing the operation in order not to have the
transmission automatically started prior the Tx FIFO is pre-initialized.
Let's clear the register then on explicit controller reset to fulfil the
requirements in case of an error or having the CS left set by a bootloader
or another software.
Signed-off-by: default avatarSerge Semin <Sergey.Semin@baikalelectronics.ru>
Link: https://lore.kernel.org/r/20201007235511.4935-14-Sergey.Semin@baikalelectronics.ruSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent c6cb3815
...@@ -238,15 +238,16 @@ static inline void spi_umask_intr(struct dw_spi *dws, u32 mask) ...@@ -238,15 +238,16 @@ static inline void spi_umask_intr(struct dw_spi *dws, u32 mask)
} }
/* /*
* This disables the SPI controller, interrupts, clears the interrupts status, * This disables the SPI controller, interrupts, clears the interrupts status
* and re-enable the controller back. Transmit and receive FIFO buffers are * and CS, then re-enables the controller back. Transmit and receive FIFO
* cleared when the device is disabled. * buffers are cleared when the device is disabled.
*/ */
static inline void spi_reset_chip(struct dw_spi *dws) static inline void spi_reset_chip(struct dw_spi *dws)
{ {
spi_enable_chip(dws, 0); spi_enable_chip(dws, 0);
spi_mask_intr(dws, 0xff); spi_mask_intr(dws, 0xff);
dw_readl(dws, DW_SPI_ICR); dw_readl(dws, DW_SPI_ICR);
dw_writel(dws, DW_SPI_SER, 0);
spi_enable_chip(dws, 1); spi_enable_chip(dws, 1);
} }
......
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