Skip to content

Commit

Permalink
spi: rspi: Move RSPI-specific setup out of DMA routines
Browse files Browse the repository at this point in the history
Refactor RSPI (on SH) DMA handling to make it reusable for other RSPI
implementations:
  - Call the DMA routines after configuring the TX Mode bit and after
    calling rspi_receive_init(), so these RSPI-specific operations can be
    removed from the DMA routines,
  - Absorb rspi_transfer_out_in() into rspi_transfer_one().

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Mark Brown <broonie@linaro.org>
  • Loading branch information
Geert Uytterhoeven authored and Mark Brown committed Jun 2, 2014
1 parent 2f777ec commit 8393fa7
Showing 1 changed file with 10 additions and 20 deletions.
30 changes: 10 additions & 20 deletions drivers/spi/spi-rspi.c
Original file line number Diff line number Diff line change
Expand Up @@ -480,7 +480,6 @@ static int rspi_send_dma(struct rspi_data *rspi, struct spi_transfer *t)
*/
disable_irq(rspi->tx_irq);

rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) | SPCR_TXMD, RSPI_SPCR);
rspi_enable_irq(rspi, SPCR_SPTIE);
rspi->dma_callbacked = 0;

Expand Down Expand Up @@ -550,8 +549,6 @@ static int rspi_send_receive_dma(struct rspi_data *rspi, struct spi_transfer *t)
if (!desc_rx)
return -EIO;

rspi_receive_init(rspi);

/*
* DMAC needs SPTIE, but if SPTIE is set, this IRQ routine will be
* called. So, this driver disables the IRQ while DMA transfer.
Expand All @@ -560,7 +557,6 @@ static int rspi_send_receive_dma(struct rspi_data *rspi, struct spi_transfer *t)
if (rspi->rx_irq != rspi->tx_irq)
disable_irq(rspi->rx_irq);

rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) & ~SPCR_TXMD, RSPI_SPCR);
rspi_enable_irq(rspi, SPCR_SPTIE | SPCR_SPRIE);
rspi->dma_callbacked = 0;

Expand Down Expand Up @@ -602,9 +598,10 @@ static bool rspi_can_dma(struct spi_master *master, struct spi_device *spi,
return __rspi_can_dma(rspi, xfer);
}

static int rspi_transfer_out_in(struct rspi_data *rspi,
struct spi_transfer *xfer)
static int rspi_transfer_one(struct spi_master *master, struct spi_device *spi,
struct spi_transfer *xfer)
{
struct rspi_data *rspi = spi_master_get_devdata(master);
u8 spcr;
int ret;

Expand All @@ -617,6 +614,13 @@ static int rspi_transfer_out_in(struct rspi_data *rspi,
}
rspi_write8(rspi, spcr, RSPI_SPCR);

if (master->can_dma && __rspi_can_dma(rspi, xfer)) {
if (xfer->rx_buf)
return rspi_send_receive_dma(rspi, xfer);
else
return rspi_send_dma(rspi, xfer);
}

ret = rspi_pio_transfer(rspi, xfer->tx_buf, xfer->rx_buf, xfer->len);
if (ret < 0)
return ret;
Expand All @@ -627,20 +631,6 @@ static int rspi_transfer_out_in(struct rspi_data *rspi,
return 0;
}

static int rspi_transfer_one(struct spi_master *master, struct spi_device *spi,
struct spi_transfer *xfer)
{
struct rspi_data *rspi = spi_master_get_devdata(master);

if (!master->can_dma || !__rspi_can_dma(rspi, xfer))
return rspi_transfer_out_in(rspi, xfer);

if (xfer->rx_buf)
return rspi_send_receive_dma(rspi, xfer);
else
return rspi_send_dma(rspi, xfer);
}

static int rspi_rz_transfer_out_in(struct rspi_data *rspi,
struct spi_transfer *xfer)
{
Expand Down

0 comments on commit 8393fa7

Please sign in to comment.