]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
spi: img-spfi: fix controller deregistration
authorJohan Hovold <johan@kernel.org>
Thu, 9 Apr 2026 12:04:14 +0000 (14:04 +0200)
committerMark Brown <broonie@kernel.org>
Thu, 9 Apr 2026 19:08:10 +0000 (20:08 +0100)
Make sure to deregister the controller before disabling and releasing
underlying resources like clocks and DMA during driver unbind.

Fixes: deba25800a12 ("spi: Add driver for IMG SPFI controller")
Cc: stable@vger.kernel.org # 3.19
Cc: Andrew Bresticker <abrestic@chromium.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
Link: https://patch.msgid.link/20260409120419.388546-16-johan@kernel.org
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-img-spfi.c

index 902fb64815c989fd5ef3f5f70484ad88e1923b2e..57625a3ce2f2d6333ecb720ca9c4ae5289ac604f 100644 (file)
@@ -643,7 +643,7 @@ static int img_spfi_probe(struct platform_device *pdev)
        pm_runtime_set_active(spfi->dev);
        pm_runtime_enable(spfi->dev);
 
-       ret = devm_spi_register_controller(spfi->dev, host);
+       ret = spi_register_controller(host);
        if (ret)
                goto disable_pm;
 
@@ -669,6 +669,10 @@ static void img_spfi_remove(struct platform_device *pdev)
        struct spi_controller *host = platform_get_drvdata(pdev);
        struct img_spfi *spfi = spi_controller_get_devdata(host);
 
+       spi_controller_get(host);
+
+       spi_unregister_controller(host);
+
        if (spfi->tx_ch)
                dma_release_channel(spfi->tx_ch);
        if (spfi->rx_ch)
@@ -679,6 +683,8 @@ static void img_spfi_remove(struct platform_device *pdev)
                clk_disable_unprepare(spfi->spfi_clk);
                clk_disable_unprepare(spfi->sys_clk);
        }
+
+       spi_controller_put(host);
 }
 
 #ifdef CONFIG_PM