spi: move split xfers for CS_WORD emulation
authorDavid Lechner <dlechner@baylibre.com>
Fri, 26 Jan 2024 21:23:57 +0000 (15:23 -0600)
committerMark Brown <broonie@kernel.org>
Mon, 5 Feb 2024 14:35:44 +0000 (14:35 +0000)
commitc8bec3355f08ddb887d5c13b7095dfa79e6db108
tree56c78044c77c7987b21ae1b78fc1525bbfd981ed
parent1e942b5bb18e8a9709a5cb5293b15dd54ed79f98
spi: move split xfers for CS_WORD emulation

This moves splitting transfers for CS_WORD software emulation to the
same place where we split transfers for controller-specific reasons.

This fixes a few subtle bugs.

The calculation for maxsize was wrong for bit sizes between 17 and 24.
This is fixed by making use of spi_split_transfers_maxwords() which
already has the correct calculation.

Also, since this indirectly calls spi_res_alloc(), to avoid leaking
resources, spi_finalize_current_message() would need to be called
on all error paths in __spi_validate() and callers of __spi_validate()
would need to do the same. This is fixed by moving the call to
__spi_pump_transfer_message() where it is already splitting transfers
for other reasons and correctly releases resources in the subsequent
error paths.

Fixes: cbaa62e0094a ("spi: add software implementation for SPI_CS_WORD")
Signed-off-by: David Lechner <dlechner@baylibre.com>
Link: https://lore.kernel.org/r/20240126212358.3916280-2-dlechner@baylibre.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi.c