Unverified Commit ecea4f0e authored by Johan Hovold's avatar Johan Hovold Committed by Mark Brown
Browse files

spi: cadence: fix clock imbalance on probe failure



Make sure that the controller is active before disabling clocks on probe
failure to avoid unbalanced clock disable.

Also drop the usage count before returning (so that the controller can
be suspended after a probe deferral) and restore the autosuspend
setting.

Fixes: d36ccd9f ("spi: cadence: Runtime pm adaptation")
Cc: stable@vger.kernel.org	# 4.7
Cc: Shubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
Link: https://patch.msgid.link/20260421123615.1533617-3-johan@kernel.org


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 5b1689a4
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -741,7 +741,6 @@ static int cdns_spi_probe(struct platform_device *pdev)
		/* Set to default valid value */
		ctlr->max_speed_hz = xspi->clk_rate / 4;
		xspi->speed_hz = ctlr->max_speed_hz;
		pm_runtime_put_autosuspend(&pdev->dev);
	} else {
		ctlr->mode_bits |= SPI_NO_CS;
		ctlr->target_abort = cdns_target_abort;
@@ -752,12 +751,17 @@ static int cdns_spi_probe(struct platform_device *pdev)
		goto clk_dis_all;
	}

	if (!spi_controller_is_target(ctlr))
		pm_runtime_put_autosuspend(&pdev->dev);

	return ret;

clk_dis_all:
	if (!spi_controller_is_target(ctlr)) {
		pm_runtime_disable(&pdev->dev);
		pm_runtime_set_suspended(&pdev->dev);
		pm_runtime_put_noidle(&pdev->dev);
		pm_runtime_dont_use_autosuspend(&pdev->dev);
	}
remove_ctlr:
	spi_controller_put(ctlr);