]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
spi: cadence: fix clock imbalance on probe failure
authorJohan Hovold <johan@kernel.org>
Tue, 21 Apr 2026 12:36:13 +0000 (14:36 +0200)
committerMark Brown <broonie@kernel.org>
Sun, 26 Apr 2026 23:25:49 +0000 (08:25 +0900)
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: d36ccd9f7ea4 ("spi: cadence: Runtime pm adaptation")
Cc: stable@vger.kernel.org # 4.7
Cc: Shubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
Link: https://patch.msgid.link/20260421123615.1533617-3-johan@kernel.org
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-cadence.c

index bf4a7cf6b1426b0555ee502bc2d0e4a319355bf0..891e2ba36958498c0d1e1fbb67ef381c65b63118 100644 (file)
@@ -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);