]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
spi: dw: Update Rx sample delay in the config function
authorSerge Semin <Sergey.Semin@baikalelectronics.ru>
Wed, 7 Oct 2020 23:54:55 +0000 (02:54 +0300)
committerMark Brown <broonie@kernel.org>
Thu, 8 Oct 2020 22:00:09 +0000 (23:00 +0100)
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.Semin@baikalelectronics.ru>
Link: https://lore.kernel.org/r/20201007235511.4935-7-Sergey.Semin@baikalelectronics.ru
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-dw-core.c

index cc341080d1a4ab99d1d997b89810eff824de4c7e..12080ea2ad845ef3423c945aca065289b656888a 100644 (file)
@@ -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);