]> www.infradead.org Git - linux.git/commitdiff
spi: spi-fsl-lpspi: support effective_speed_hz
authorStefan Wahren <wahrenst@gmx.net>
Mon, 30 Sep 2024 09:30:56 +0000 (11:30 +0200)
committerMark Brown <broonie@kernel.org>
Mon, 30 Sep 2024 21:31:40 +0000 (22:31 +0100)
Setting spi_transfer->effective_speed_hz in transfer_one so that
SPI client driver can use it.

Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Link: https://patch.msgid.link/20240930093056.93418-4-wahrenst@gmx.net
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-fsl-lpspi.c

index 3b5aa91079ae5963c8a5df03ea98926d4b8ddf02..5d55ef4d4ba62f21555af8827b6270717c180683 100644 (file)
@@ -92,6 +92,7 @@ struct lpspi_config {
        u8 prescale;
        u16 mode;
        u32 speed_hz;
+       u32 effective_speed_hz;
 };
 
 struct fsl_lpspi_data {
@@ -351,6 +352,9 @@ static int fsl_lpspi_set_bitrate(struct fsl_lpspi_data *fsl_lpspi)
        writel(scldiv | (scldiv << 8) | ((scldiv >> 1) << 16),
                                        fsl_lpspi->base + IMX7ULP_CCR);
 
+       fsl_lpspi->config.effective_speed_hz = perclk_rate / (scldiv + 2) *
+                                              (1 << prescale);
+
        dev_dbg(fsl_lpspi->dev, "perclk=%u, speed=%u, prescale=%u, scldiv=%d\n",
                perclk_rate, config.speed_hz, prescale, scldiv);
 
@@ -750,6 +754,8 @@ static int fsl_lpspi_transfer_one(struct spi_controller *controller,
        if (ret < 0)
                return ret;
 
+       t->effective_speed_hz = fsl_lpspi->config.effective_speed_hz;
+
        fsl_lpspi_set_cmd(fsl_lpspi);
        fsl_lpspi->is_first_byte = false;