Skip to content

Commit c9c0127

Browse files
jhovoldbroonie
authored andcommitted
spi: zynq-qspi: fix controller deregistration
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>
1 parent 6895fc4 commit c9c0127

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
@@ -643,7 +643,7 @@ static int zynq_qspi_probe(struct platform_device *pdev)
643643

644644
xqspi = spi_controller_get_devdata(ctlr);
645645
xqspi->dev = dev;
646-
platform_set_drvdata(pdev, xqspi);
646+
platform_set_drvdata(pdev, ctlr);
647647
xqspi->regs = devm_platform_ioremap_resource(pdev, 0);
648648
if (IS_ERR(xqspi->regs)) {
649649
ret = PTR_ERR(xqspi->regs);
@@ -702,9 +702,9 @@ static int zynq_qspi_probe(struct platform_device *pdev)
702702
/* QSPI controller initializations */
703703
zynq_qspi_init_hw(xqspi, ctlr->num_chipselect);
704704

705-
ret = devm_spi_register_controller(&pdev->dev, ctlr);
705+
ret = spi_register_controller(ctlr);
706706
if (ret) {
707-
dev_err(&pdev->dev, "devm_spi_register_controller failed\n");
707+
dev_err(&pdev->dev, "failed to register controller\n");
708708
goto remove_ctlr;
709709
}
710710

@@ -728,9 +728,16 @@ static int zynq_qspi_probe(struct platform_device *pdev)
728728
*/
729729
static void zynq_qspi_remove(struct platform_device *pdev)
730730
{
731-
struct zynq_qspi *xqspi = platform_get_drvdata(pdev);
731+
struct spi_controller *ctlr = platform_get_drvdata(pdev);
732+
struct zynq_qspi *xqspi = spi_controller_get_devdata(ctlr);
733+
734+
spi_controller_get(ctlr);
735+
736+
spi_unregister_controller(ctlr);
732737

733738
zynq_qspi_write(xqspi, ZYNQ_QSPI_ENABLE_OFFSET, 0);
739+
740+
spi_controller_put(ctlr);
734741
}
735742

736743
static const struct of_device_id zynq_qspi_of_match[] = {

0 commit comments

Comments
 (0)