Skip to content

Commit 136cee6

Browse files
jhovoldgregkh
authored andcommitted
spi: zynq-qspi: fix controller deregistration
[ Upstream commit c9c0127 ] Make sure to deregister the controller before disabling it during driver unbind. Note that clocks were also disabled before the recent commit 1f8fd94 ("spi: zynq-qspi: Simplify clock handling with devm_clk_get_enabled()"). Fixes: 67dca5e ("spi: spi-mem: Add support for Zynq QSPI controller") Cc: stable@vger.kernel.org # 5.2: 8eb2fd0 Cc: stable@vger.kernel.org # 5.2 Cc: Naga Sureshkumar Relli <naga.sureshkumar.relli@xilinx.com> Signed-off-by: Johan Hovold <johan@kernel.org> Link: https://patch.msgid.link/20260410081757.503099-27-johan@kernel.org Signed-off-by: Mark Brown <broonie@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent fe87fca commit 136cee6

1 file changed

Lines changed: 11 additions & 4 deletions

File tree

drivers/spi/spi-zynq-qspi.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -641,7 +641,7 @@ static int zynq_qspi_probe(struct platform_device *pdev)
641641

642642
xqspi = spi_controller_get_devdata(ctlr);
643643
xqspi->dev = dev;
644-
platform_set_drvdata(pdev, xqspi);
644+
platform_set_drvdata(pdev, ctlr);
645645
xqspi->regs = devm_platform_ioremap_resource(pdev, 0);
646646
if (IS_ERR(xqspi->regs)) {
647647
ret = PTR_ERR(xqspi->regs);
@@ -699,9 +699,9 @@ static int zynq_qspi_probe(struct platform_device *pdev)
699699
/* QSPI controller initializations */
700700
zynq_qspi_init_hw(xqspi, ctlr->num_chipselect);
701701

702-
ret = devm_spi_register_controller(&pdev->dev, ctlr);
702+
ret = spi_register_controller(ctlr);
703703
if (ret) {
704-
dev_err(&pdev->dev, "devm_spi_register_controller failed\n");
704+
dev_err(&pdev->dev, "failed to register controller\n");
705705
goto remove_ctlr;
706706
}
707707

@@ -725,9 +725,16 @@ static int zynq_qspi_probe(struct platform_device *pdev)
725725
*/
726726
static void zynq_qspi_remove(struct platform_device *pdev)
727727
{
728-
struct zynq_qspi *xqspi = platform_get_drvdata(pdev);
728+
struct spi_controller *ctlr = platform_get_drvdata(pdev);
729+
struct zynq_qspi *xqspi = spi_controller_get_devdata(ctlr);
730+
731+
spi_controller_get(ctlr);
732+
733+
spi_unregister_controller(ctlr);
729734

730735
zynq_qspi_write(xqspi, ZYNQ_QSPI_ENABLE_OFFSET, 0);
736+
737+
spi_controller_put(ctlr);
731738
}
732739

733740
static const struct of_device_id zynq_qspi_of_match[] = {

0 commit comments

Comments
 (0)