spi: rockchip: simplify use_dma logic
authorEmil Renner Berthing <kernel@esmil.dk>
Wed, 31 Oct 2018 10:57:06 +0000 (11:57 +0100)
committerMark Brown <broonie@kernel.org>
Mon, 5 Nov 2018 11:42:23 +0000 (11:42 +0000)
We only need to know if we're using dma when setting
up the transfer, so just use a local variable for
that.

Signed-off-by: Emil Renner Berthing <kernel@esmil.dk>
Tested-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-rockchip.c

index 45a1479c1a29fe7cc37353cb69b282cc3a13afb6..ba60cbcd45c2275b4b67e7c2ab2d9c6f8fb88e22 100644 (file)
@@ -184,8 +184,6 @@ struct rockchip_spi {
        void *rx_end;
 
        bool cs_asserted[ROCKCHIP_SPI_MAX_CS_NUM];
-
-       bool use_dma;
 };
 
 static inline void spi_enable_chip(struct rockchip_spi *rs, bool enable)
@@ -450,7 +448,8 @@ static int rockchip_spi_prepare_dma(struct rockchip_spi *rs,
 }
 
 static void rockchip_spi_config(struct rockchip_spi *rs,
-               struct spi_device *spi, struct spi_transfer *xfer)
+               struct spi_device *spi, struct spi_transfer *xfer,
+               bool use_dma)
 {
        u32 div = 0;
        u32 dmacr = 0;
@@ -471,7 +470,7 @@ static void rockchip_spi_config(struct rockchip_spi *rs,
        else
                cr0 |= CR0_XFM_TO << CR0_XFM_OFFSET;
 
-       if (rs->use_dma) {
+       if (use_dma) {
                if (xfer->tx_buf)
                        dmacr |= TF_DMA_EN;
                if (xfer->rx_buf)
@@ -537,6 +536,7 @@ static int rockchip_spi_transfer_one(
                struct spi_transfer *xfer)
 {
        struct rockchip_spi *rs = spi_master_get_devdata(master);
+       bool use_dma;
 
        WARN_ON(readl_relaxed(rs->regs + ROCKCHIP_SPI_SSIENR) &&
                (readl_relaxed(rs->regs + ROCKCHIP_SPI_SR) & SR_BUSY));
@@ -559,15 +559,11 @@ static int rockchip_spi_transfer_one(
        rs->rx = xfer->rx_buf;
        rs->rx_end = rs->rx + xfer->len;
 
-       /* we need prepare dma before spi was enabled */
-       if (master->can_dma && master->can_dma(master, spi, xfer))
-               rs->use_dma = true;
-       else
-               rs->use_dma = false;
+       use_dma = master->can_dma ? master->can_dma(master, spi, xfer) : false;
 
-       rockchip_spi_config(rs, spi, xfer);
+       rockchip_spi_config(rs, spi, xfer, use_dma);
 
-       if (rs->use_dma)
+       if (use_dma)
                return rockchip_spi_prepare_dma(rs, master, xfer);
 
        return rockchip_spi_pio_transfer(rs);