spi: core: Abort active target transfer on controller suspend

When an SPI controller operating in target mode has a transfer in
progress at the time of system suspend, the suspend path proceeds
without aborting the ongoing transfer. This can leave the hardware in
an inconsistent state, potentially causing the system to hang or fail
to resume cleanly.

Fix this by invoking the controller's target_abort callback from
spi_controller_suspend() when the controller is in target mode and the
callback is registered. This ensures any active target transfer is
cleanly terminated before the controller is suspended.

Signed-off-by: Praveen Talari <praveen.talari@oss.qualcomm.com>
Link: https://patch.msgid.link/20260625-abort_active_transfer_duirng_s2r-v2-1-1d6f724406b6@oss.qualcomm.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Praveen Talari 2026-06-25 21:26:02 +05:30 committed by Mark Brown
parent 6dbaa4d288
commit c1bab046d4
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0

View File

@ -3671,6 +3671,9 @@ int spi_controller_suspend(struct spi_controller *ctlr)
{
int ret = 0;
if (ctlr->cur_msg && spi_controller_is_target(ctlr) && ctlr->target_abort)
ctlr->target_abort(ctlr);
/* Basically no-ops for non-queued controllers */
if (ctlr->queued) {
ret = spi_stop_queue(ctlr);