mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 22:51:35 +00:00
spi: img-spfi: Implement a prepare_message() callback
In preparation for switching to using the SPI core's CS GPIO handling, move setup of the PORT_STATE register, which must be configured before CS is asserted, to a prepare_message() callback. Signed-off-by: Ezequiel Garcia <ezequiel.garcia@imgtec.com> Signed-off-by: Andrew Bresticker <abrestic@chromium.org> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
6e0050ec8e
commit
b6fe39770a
@ -396,6 +396,25 @@ stop_dma:
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
static int img_spfi_prepare(struct spi_master *master, struct spi_message *msg)
|
||||
{
|
||||
struct img_spfi *spfi = spi_master_get_devdata(master);
|
||||
u32 val;
|
||||
|
||||
val = spfi_readl(spfi, SPFI_PORT_STATE);
|
||||
if (msg->spi->mode & SPI_CPHA)
|
||||
val |= SPFI_PORT_STATE_CK_PHASE(msg->spi->chip_select);
|
||||
else
|
||||
val &= ~SPFI_PORT_STATE_CK_PHASE(msg->spi->chip_select);
|
||||
if (msg->spi->mode & SPI_CPOL)
|
||||
val |= SPFI_PORT_STATE_CK_POL(msg->spi->chip_select);
|
||||
else
|
||||
val &= ~SPFI_PORT_STATE_CK_POL(msg->spi->chip_select);
|
||||
spfi_writel(spfi, val, SPFI_PORT_STATE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void img_spfi_config(struct spi_master *master, struct spi_device *spi,
|
||||
struct spi_transfer *xfer)
|
||||
{
|
||||
@ -433,18 +452,6 @@ static void img_spfi_config(struct spi_master *master, struct spi_device *spi,
|
||||
&master->cur_msg->transfers))
|
||||
val |= SPFI_CONTROL_CONTINUE;
|
||||
spfi_writel(spfi, val, SPFI_CONTROL);
|
||||
|
||||
val = spfi_readl(spfi, SPFI_PORT_STATE);
|
||||
if (spi->mode & SPI_CPHA)
|
||||
val |= SPFI_PORT_STATE_CK_PHASE(spi->chip_select);
|
||||
else
|
||||
val &= ~SPFI_PORT_STATE_CK_PHASE(spi->chip_select);
|
||||
if (spi->mode & SPI_CPOL)
|
||||
val |= SPFI_PORT_STATE_CK_POL(spi->chip_select);
|
||||
else
|
||||
val &= ~SPFI_PORT_STATE_CK_POL(spi->chip_select);
|
||||
spfi_writel(spfi, val, SPFI_PORT_STATE);
|
||||
|
||||
spfi_writel(spfi, xfer->len << SPFI_TRANSACTION_TSIZE_SHIFT,
|
||||
SPFI_TRANSACTION);
|
||||
}
|
||||
@ -591,6 +598,7 @@ static int img_spfi_probe(struct platform_device *pdev)
|
||||
|
||||
master->set_cs = img_spfi_set_cs;
|
||||
master->transfer_one = img_spfi_transfer_one;
|
||||
master->prepare_message = img_spfi_prepare;
|
||||
|
||||
spfi->tx_ch = dma_request_slave_channel(spfi->dev, "tx");
|
||||
spfi->rx_ch = dma_request_slave_channel(spfi->dev, "rx");
|
||||
|
Loading…
Reference in New Issue
Block a user