From 5f8bf41df57f80ded2cee2ae1f0e5af597cca5bb Mon Sep 17 00:00:00 2001 From: Emil Renner Berthing Date: Wed, 31 Oct 2018 11:57:06 +0100 Subject: [PATCH] UPSTREAM: spi: rockchip: simplify use_dma logic We only need to know if we're using dma when setting up the transfer, so just use a local variable for that. Change-Id: Id5e755186278f8cf4aff6e0f175bd522aee324ae Signed-off-by: Emil Renner Berthing Tested-by: Heiko Stuebner Signed-off-by: Mark Brown Signed-off-by: Jon Lin (cherry picked from commit eff0275e5253604429aedc42b008c5fcaa6cc597) --- drivers/spi/spi-rockchip.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c index 72bbab586382..8954999cf0e8 100644 --- a/drivers/spi/spi-rockchip.c +++ b/drivers/spi/spi-rockchip.c @@ -192,8 +192,6 @@ struct rockchip_spi { bool cs_asserted[ROCKCHIP_SPI_MAX_CS_NUM]; - bool use_dma; - struct pinctrl_state *high_speed_state; }; @@ -473,7 +471,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; @@ -494,7 +493,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) @@ -574,6 +573,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)); @@ -596,15 +596,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);