Unverified Commit c9c01270 authored by Johan Hovold's avatar Johan Hovold Committed by Mark Brown
Browse files

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
1f8fd949 ("spi: zynq-qspi: Simplify clock handling with
devm_clk_get_enabled()").

Fixes: 67dca5e5 ("spi: spi-mem: Add support for Zynq QSPI controller")
Cc: stable@vger.kernel.org	# 5.2: 8eb2fd00
Cc: stable@vger.kernel.org	# 5.2
Cc: Naga Sureshkumar Relli <naga.sureshkumar.relli@xilinx.com>
Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
Link: https://patch.msgid.link/20260410081757.503099-27-johan@kernel.org


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 6895fc4f
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -643,7 +643,7 @@ static int zynq_qspi_probe(struct platform_device *pdev)

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

	ret = devm_spi_register_controller(&pdev->dev, ctlr);
	ret = spi_register_controller(ctlr);
	if (ret) {
		dev_err(&pdev->dev, "devm_spi_register_controller failed\n");
		dev_err(&pdev->dev, "failed to register controller\n");
		goto remove_ctlr;
	}

@@ -728,9 +728,16 @@ static int zynq_qspi_probe(struct platform_device *pdev)
 */
static void zynq_qspi_remove(struct platform_device *pdev)
{
	struct zynq_qspi *xqspi = platform_get_drvdata(pdev);
	struct spi_controller *ctlr = platform_get_drvdata(pdev);
	struct zynq_qspi *xqspi = spi_controller_get_devdata(ctlr);

	spi_controller_get(ctlr);

	spi_unregister_controller(ctlr);

	zynq_qspi_write(xqspi, ZYNQ_QSPI_ENABLE_OFFSET, 0);

	spi_controller_put(ctlr);
}

static const struct of_device_id zynq_qspi_of_match[] = {