Skip to content

Commit c6f82bd

Browse files
jhovoldgregkh
authored andcommitted
spi: sprd: fix controller deregistration
commit 123d17d upstream. Make sure to deregister the controller before disabling underlying resources like clocks during driver unbind. Note that the controller is suspended before disabling and releasing resources since commit de082d8 ("spi: sprd: Add the SPI irq function for the SPI DMA mode") which avoids issues like unclocked accesses but prevents SPI device drivers from doing I/O during deregistration. Fixes: e7d973a ("spi: sprd: Add SPI driver for Spreadtrum SC9860") Cc: stable@vger.kernel.org # 4.20 Cc: Lanqing Liu <lanqing.liu@spreadtrum.com> Signed-off-by: Johan Hovold <johan@kernel.org> Link: https://patch.msgid.link/20260410081757.503099-17-johan@kernel.org Signed-off-by: Mark Brown <broonie@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 6dd37ce commit c6f82bd

1 file changed

Lines changed: 6 additions & 2 deletions

File tree

drivers/spi/spi-sprd.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -978,7 +978,7 @@ static int sprd_spi_probe(struct platform_device *pdev)
978978
goto err_rpm_put;
979979
}
980980

981-
ret = devm_spi_register_controller(&pdev->dev, sctlr);
981+
ret = spi_register_controller(sctlr);
982982
if (ret)
983983
goto err_rpm_put;
984984

@@ -1010,7 +1010,9 @@ static void sprd_spi_remove(struct platform_device *pdev)
10101010
if (ret < 0)
10111011
dev_err(ss->dev, "failed to resume SPI controller\n");
10121012

1013-
spi_controller_suspend(sctlr);
1013+
spi_controller_get(sctlr);
1014+
1015+
spi_unregister_controller(sctlr);
10141016

10151017
if (ret >= 0) {
10161018
if (ss->dma.enable)
@@ -1019,6 +1021,8 @@ static void sprd_spi_remove(struct platform_device *pdev)
10191021
}
10201022
pm_runtime_put_noidle(&pdev->dev);
10211023
pm_runtime_disable(&pdev->dev);
1024+
1025+
spi_controller_put(sctlr);
10221026
}
10231027

10241028
static int __maybe_unused sprd_spi_runtime_suspend(struct device *dev)

0 commit comments

Comments
 (0)