diff options
| author | Ingo Molnar <mingo@kernel.org> | 2024-03-25 13:32:29 +0300 | 
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2024-03-25 13:32:29 +0300 | 
| commit | f4566a1e73957800df75a3dd2dccee8a4697f327 (patch) | |
| tree | b043b875228c0b25988af66c680d60cae69d761d /drivers/spi/spi-stm32.c | |
| parent | b9e6e28663928cab836a19abbdec3d036a07db3b (diff) | |
| parent | 4cece764965020c22cff7665b18a012006359095 (diff) | |
| download | linux-f4566a1e73957800df75a3dd2dccee8a4697f327.tar.xz | |
Merge tag 'v6.9-rc1' into sched/core, to pick up fixes and to refresh the branch
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/spi/spi-stm32.c')
| -rw-r--r-- | drivers/spi/spi-stm32.c | 30 | 
1 files changed, 16 insertions, 14 deletions
diff --git a/drivers/spi/spi-stm32.c b/drivers/spi/spi-stm32.c index e61302ef3c21..e4e7ddb7524a 100644 --- a/drivers/spi/spi-stm32.c +++ b/drivers/spi/spi-stm32.c @@ -1118,6 +1118,21 @@ static irqreturn_t stm32h7_spi_irq_thread(int irq, void *dev_id)  	return IRQ_HANDLED;  } +static int stm32_spi_optimize_message(struct spi_message *msg) +{ +	struct spi_controller *ctrl = msg->spi->controller; +	struct stm32_spi *spi = spi_controller_get_devdata(ctrl); + +	/* On STM32H7, messages should not exceed a maximum size set +	 * later via the set_number_of_data function. In order to +	 * ensure that, split large messages into several messages +	 */ +	if (spi->cfg->set_number_of_data) +		return spi_split_transfers_maxwords(ctrl, msg, spi->t_size_max); + +	return 0; +} +  /**   * stm32_spi_prepare_msg - set up the controller to transfer a single message   * @ctrl: controller interface @@ -1163,20 +1178,6 @@ static int stm32_spi_prepare_msg(struct spi_controller *ctrl,  		!!(spi_dev->mode & SPI_LSB_FIRST),  		!!(spi_dev->mode & SPI_CS_HIGH)); -	/* On STM32H7, messages should not exceed a maximum size setted -	 * afterward via the set_number_of_data function. In order to -	 * ensure that, split large messages into several messages -	 */ -	if (spi->cfg->set_number_of_data) { -		int ret; - -		ret = spi_split_transfers_maxwords(ctrl, msg, -						   spi->t_size_max, -						   GFP_KERNEL | GFP_DMA); -		if (ret) -			return ret; -	} -  	spin_lock_irqsave(&spi->lock, flags);  	/* CPOL, CPHA and LSB FIRST bits have common register */ @@ -2182,6 +2183,7 @@ static int stm32_spi_probe(struct platform_device *pdev)  	ctrl->max_speed_hz = spi->clk_rate / spi->cfg->baud_rate_div_min;  	ctrl->min_speed_hz = spi->clk_rate / spi->cfg->baud_rate_div_max;  	ctrl->use_gpio_descriptors = true; +	ctrl->optimize_message = stm32_spi_optimize_message;  	ctrl->prepare_message = stm32_spi_prepare_msg;  	ctrl->transfer_one = stm32_spi_transfer_one;  	ctrl->unprepare_message = stm32_spi_unprepare_msg;  | 
