Unverified Commit 247ba5ea authored by Ben Wolsieffer's avatar Ben Wolsieffer Committed by Mark Brown
Browse files

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: default avatarBen Wolsieffer <ben.wolsieffer@hefring.com>
Link: https://lore.kernel.org/r/20231102193722.3042245-3-ben.wolsieffer@hefring.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent adde8a55
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -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,
	/*