spi: atmel-quadspi: Fix unbalanced pm_runtime by using devm_ API
authorBence Csókás <csokas.bence@prolan.hu>
Thu, 27 Mar 2025 19:59:27 +0000 (20:59 +0100)
committerMark Brown <broonie@kernel.org>
Sun, 11 May 2025 01:30:02 +0000 (10:30 +0900)
Fix unbalanced PM in error path of `atmel_qspi_probe()`
by using `devm_pm_runtime_*()` functions.

Reported-by: Alexander Dahl <ada@thorsis.com>
Closes: https://lore.kernel.org/linux-spi/20250110-paycheck-irregular-bcddab1276c7@thorsis.com/
Fixes: 5af42209a4d2 ("spi: atmel-quadspi: Add support for sama7g5 QSPI")
Signed-off-by: Bence Csókás <csokas.bence@prolan.hu>
Link: https://patch.msgid.link/20250327195928.680771-4-csokas.bence@prolan.hu
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/atmel-quadspi.c

index 244ac010686298c58427fadc0ebfff5e62d18880..e7b61dc4ce67668bdb9f6d6737d28b821d60b082 100644 (file)
@@ -1436,22 +1436,17 @@ static int atmel_qspi_probe(struct platform_device *pdev)
 
        pm_runtime_set_autosuspend_delay(&pdev->dev, 500);
        pm_runtime_use_autosuspend(&pdev->dev);
-       pm_runtime_set_active(&pdev->dev);
-       pm_runtime_enable(&pdev->dev);
-       pm_runtime_get_noresume(&pdev->dev);
+       devm_pm_runtime_set_active_enabled(&pdev->dev);
+       devm_pm_runtime_get_noresume(&pdev->dev);
 
        err = atmel_qspi_init(aq);
        if (err)
                goto dma_release;
 
        err = spi_register_controller(ctrl);
-       if (err) {
-               pm_runtime_put_noidle(&pdev->dev);
-               pm_runtime_disable(&pdev->dev);
-               pm_runtime_set_suspended(&pdev->dev);
-               pm_runtime_dont_use_autosuspend(&pdev->dev);
+       if (err)
                goto dma_release;
-       }
+
        pm_runtime_mark_last_busy(&pdev->dev);
        pm_runtime_put_autosuspend(&pdev->dev);
 
@@ -1530,10 +1525,6 @@ static void atmel_qspi_remove(struct platform_device *pdev)
                 */
                dev_warn(&pdev->dev, "Failed to resume device on remove\n");
        }
-
-       pm_runtime_disable(&pdev->dev);
-       pm_runtime_dont_use_autosuspend(&pdev->dev);
-       pm_runtime_put_noidle(&pdev->dev);
 }
 
 static int __maybe_unused atmel_qspi_suspend(struct device *dev)