spi: stm32: use callbacks for read_rx and write_tx
The STM32F7 will require different read and write routines, so make these functions into configurable callbacks. Signed-off-by: Ben Wolsieffer <ben.wolsieffer@hefring.com> Link: https://lore.kernel.org/r/20231102193722.3042245-3-ben.wolsieffer@hefring.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
adde8a55da
commit
247ba5ea05
@ -229,6 +229,8 @@ struct stm32_spi;
|
||||
* time between frames (if driver has this functionality)
|
||||
* @set_number_of_data: optional routine to configure registers to desired
|
||||
* number of data (if driver has this functionality)
|
||||
* @write_tx: routine to write to transmit register/FIFO
|
||||
* @read_rx: routine to read from receive register/FIFO
|
||||
* @transfer_one_dma_start: routine to start transfer a single spi_transfer
|
||||
* using DMA
|
||||
* @dma_rx_cb: routine to call after DMA RX channel operation is complete
|
||||
@ -252,6 +254,8 @@ struct stm32_spi_cfg {
|
||||
int (*set_mode)(struct stm32_spi *spi, unsigned int comm_type);
|
||||
void (*set_data_idleness)(struct stm32_spi *spi, u32 length);
|
||||
int (*set_number_of_data)(struct stm32_spi *spi, u32 length);
|
||||
void (*write_tx)(struct stm32_spi *spi);
|
||||
void (*read_rx)(struct stm32_spi *spi);
|
||||
void (*transfer_one_dma_start)(struct stm32_spi *spi);
|
||||
void (*dma_rx_cb)(void *data);
|
||||
void (*dma_tx_cb)(void *data);
|
||||
@ -822,17 +826,17 @@ static irqreturn_t stm32fx_spi_irq_event(int irq, void *dev_id)
|
||||
|
||||
if (sr & STM32FX_SPI_SR_TXE) {
|
||||
if (spi->tx_buf)
|
||||
stm32f4_spi_write_tx(spi);
|
||||
spi->cfg->write_tx(spi);
|
||||
if (spi->tx_len == 0)
|
||||
end = true;
|
||||
}
|
||||
|
||||
if (sr & STM32FX_SPI_SR_RXNE) {
|
||||
stm32f4_spi_read_rx(spi);
|
||||
spi->cfg->read_rx(spi);
|
||||
if (spi->rx_len == 0)
|
||||
end = true;
|
||||
else if (spi->tx_buf)/* Load data for discontinuous mode */
|
||||
stm32f4_spi_write_tx(spi);
|
||||
spi->cfg->write_tx(spi);
|
||||
}
|
||||
|
||||
end_irq:
|
||||
@ -1149,7 +1153,7 @@ static int stm32fx_spi_transfer_one_irq(struct stm32_spi *spi)
|
||||
|
||||
/* starting data transfer when buffer is loaded */
|
||||
if (spi->tx_buf)
|
||||
stm32f4_spi_write_tx(spi);
|
||||
spi->cfg->write_tx(spi);
|
||||
|
||||
spin_unlock_irqrestore(&spi->lock, flags);
|
||||
|
||||
@ -1752,6 +1756,8 @@ static const struct stm32_spi_cfg stm32f4_spi_cfg = {
|
||||
.config = stm32fx_spi_config,
|
||||
.set_bpw = stm32f4_spi_set_bpw,
|
||||
.set_mode = stm32fx_spi_set_mode,
|
||||
.write_tx = stm32f4_spi_write_tx,
|
||||
.read_rx = stm32f4_spi_read_rx,
|
||||
.transfer_one_dma_start = stm32fx_spi_transfer_one_dma_start,
|
||||
.dma_tx_cb = stm32fx_spi_dma_tx_cb,
|
||||
.dma_rx_cb = stm32_spi_dma_rx_cb,
|
||||
@ -1775,6 +1781,8 @@ static const struct stm32_spi_cfg stm32h7_spi_cfg = {
|
||||
.set_mode = stm32h7_spi_set_mode,
|
||||
.set_data_idleness = stm32h7_spi_data_idleness,
|
||||
.set_number_of_data = stm32h7_spi_number_of_data,
|
||||
.write_tx = stm32h7_spi_write_txfifo,
|
||||
.read_rx = stm32h7_spi_read_rxfifo,
|
||||
.transfer_one_dma_start = stm32h7_spi_transfer_one_dma_start,
|
||||
.dma_rx_cb = stm32_spi_dma_rx_cb,
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user