Rx sample delay can be SPI device specific, and should be synchronously
initialized with the rest of the communication and peripheral device
related controller setups. So let's move the Rx-sample delay setup into
the DW APB SSI configuration update method.

Signed-off-by: Serge Semin <sergey.se...@baikalelectronics.ru>
---
 drivers/spi/spi-dw-core.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c
index cc341080d1a4..12080ea2ad84 100644
--- a/drivers/spi/spi-dw-core.c
+++ b/drivers/spi/spi-dw-core.c
@@ -294,13 +294,18 @@ static void dw_spi_update_config(struct dw_spi *dws, 
struct spi_device *spi,
                spi_set_clk(dws, clk_div);
                dws->current_freq = speed_hz;
        }
+
+       /* Update RX sample delay if required */
+       if (dws->cur_rx_sample_dly != chip->rx_sample_dly) {
+               dw_writel(dws, DW_SPI_RX_SAMPLE_DLY, chip->rx_sample_dly);
+               dws->cur_rx_sample_dly = chip->rx_sample_dly;
+       }
 }
 
 static int dw_spi_transfer_one(struct spi_controller *master,
                struct spi_device *spi, struct spi_transfer *transfer)
 {
        struct dw_spi *dws = spi_controller_get_devdata(master);
-       struct chip_data *chip = spi_get_ctldata(spi);
        u8 imask = 0;
        u16 txlevel = 0;
        int ret;
@@ -326,12 +331,6 @@ static int dw_spi_transfer_one(struct spi_controller 
*master,
        if (master->can_dma && master->can_dma(master, spi, transfer))
                dws->dma_mapped = master->cur_msg_mapped;
 
-       /* Update RX sample delay if required */
-       if (dws->cur_rx_sample_dly != chip->rx_sample_dly) {
-               dw_writel(dws, DW_SPI_RX_SAMPLE_DLY, chip->rx_sample_dly);
-               dws->cur_rx_sample_dly = chip->rx_sample_dly;
-       }
-
        /* For poll mode just disable all interrupts */
        spi_mask_intr(dws, 0xff);
 
-- 
2.27.0

Reply via email to