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

Fixes: 1bcb9f8ceb67 ("spi: spi-pic32: Add PIC32 SPI master driver")
Cc: stable@vger.kernel.org # 4.7
Cc: Purna Chandra Mandal <purna.mandal@microchip.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
Link: https://patch.msgid.link/20260410081757.503099-7-johan@kernel.org
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-pic32.c

index 369850d1431367de47552ff00e44dae45974c3e8..70427e5299456ded392bb4e53bc072b18ff9a459 100644 (file)
@@ -821,7 +821,7 @@ static int pic32_spi_probe(struct platform_device *pdev)
        }
 
        /* register host */
-       ret = devm_spi_register_controller(&pdev->dev, host);
+       ret = spi_register_controller(host);
        if (ret) {
                dev_err(&host->dev, "failed registering spi host\n");
                goto err_bailout;
@@ -840,11 +840,16 @@ err_host:
 
 static void pic32_spi_remove(struct platform_device *pdev)
 {
-       struct pic32_spi *pic32s;
+       struct pic32_spi *pic32s = platform_get_drvdata(pdev);
+
+       spi_controller_get(pic32s->host);
+
+       spi_unregister_controller(pic32s->host);
 
-       pic32s = platform_get_drvdata(pdev);
        pic32_spi_disable(pic32s);
        pic32_spi_dma_unprep(pic32s);
+
+       spi_controller_put(pic32s->host);
 }
 
 static const struct of_device_id pic32_spi_of_match[] = {