]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
spi: rspi: fix controller deregistration
authorJohan Hovold <johan@kernel.org>
Fri, 10 Apr 2026 08:17:40 +0000 (10:17 +0200)
committerMark Brown <broonie@kernel.org>
Fri, 10 Apr 2026 12:22:32 +0000 (13:22 +0100)
Make sure to deregister the controller before releasing underlying
resources like DMA during driver unbind.

Fixes: 9e03d05eee4c ("spi: rcar: Use devm_spi_register_master()")
Cc: stable@vger.kernel.org # 3.14
Cc: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
Link: https://patch.msgid.link/20260410081757.503099-11-johan@kernel.org
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-rspi.c

index c739c1998b4ce6edc88647793346f78e8cedd344..a8180dece716f30839002bd2b6175cffe71aa457 100644 (file)
@@ -1171,8 +1171,14 @@ static void rspi_remove(struct platform_device *pdev)
 {
        struct rspi_data *rspi = platform_get_drvdata(pdev);
 
+       spi_controller_get(rspi->ctlr);
+
+       spi_unregister_controller(rspi->ctlr);
+
        rspi_release_dma(rspi->ctlr);
        pm_runtime_disable(&pdev->dev);
+
+       spi_controller_put(rspi->ctlr);
 }
 
 static const struct spi_ops rspi_ops = {
@@ -1376,9 +1382,9 @@ static int rspi_probe(struct platform_device *pdev)
        if (ret < 0)
                dev_warn(&pdev->dev, "DMA not available, using PIO\n");
 
-       ret = devm_spi_register_controller(&pdev->dev, ctlr);
+       ret = spi_register_controller(ctlr);
        if (ret < 0) {
-               dev_err(&pdev->dev, "devm_spi_register_controller error.\n");
+               dev_err(&pdev->dev, "failed to register controller\n");
                goto error3;
        }