Unverified Commit 01602336 authored by Rob Herring's avatar Rob Herring Committed by Mark Brown
Browse files

spi: mpc5xxx-psc: Convert probe to use devres functions



Convert the mpc52xx-psc and mpc512x-psc drivers to use the managed
devres variants of functions in probe. Also use dev_err_probe() as
appropriate. With this, the error handling can be simplified.

Signed-off-by: default avatarRob Herring <robh@kernel.org>
Link: https://lore.kernel.org/r/20230217-dt-mpc5xxx-spi-v1-2-3be8602fce1e@kernel.org


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 04725901
Loading
Loading
Loading
Loading
+8 −14
Original line number Diff line number Diff line
@@ -467,7 +467,7 @@ static int mpc512x_psc_spi_do_probe(struct device *dev, u32 regaddr,
	void *tempp;
	struct clk *clk;

	master = spi_alloc_master(dev, sizeof(*mps));
	master = devm_spi_alloc_master(dev, sizeof(*mps));
	if (master == NULL)
		return -ENOMEM;

@@ -486,28 +486,24 @@ static int mpc512x_psc_spi_do_probe(struct device *dev, u32 regaddr,
	master->dev.of_node = dev->of_node;

	tempp = devm_ioremap(dev, regaddr, size);
	if (!tempp) {
		dev_err(dev, "could not ioremap I/O port range\n");
		ret = -EFAULT;
		goto free_master;
	}
	if (!tempp)
		return dev_err_probe(dev, -EFAULT, "could not ioremap I/O port range\n");
	mps->psc = tempp;
	mps->fifo =
		(struct mpc512x_psc_fifo *)(tempp + sizeof(struct mpc52xx_psc));
	ret = devm_request_irq(dev, mps->irq, mpc512x_psc_spi_isr, IRQF_SHARED,
				"mpc512x-psc-spi", mps);
	if (ret)
		goto free_master;
		return ret;
	init_completion(&mps->txisrdone);

	clk = devm_clk_get(dev, "mclk");
	if (IS_ERR(clk)) {
		ret = PTR_ERR(clk);
		goto free_master;
	}
	if (IS_ERR(clk))
		return PTR_ERR(clk);

	ret = clk_prepare_enable(clk);
	if (ret)
		goto free_master;
		return ret;
	mps->clk_mclk = clk;
	mps->mclk_rate = clk_get_rate(clk);

@@ -535,8 +531,6 @@ static int mpc512x_psc_spi_do_probe(struct device *dev, u32 regaddr,
	clk_disable_unprepare(mps->clk_ipg);
free_mclk_clock:
	clk_disable_unprepare(mps->clk_mclk);
free_master:
	spi_master_put(master);

	return ret;
}
+10 −43
Original line number Diff line number Diff line
@@ -300,7 +300,7 @@ static int mpc52xx_psc_spi_do_probe(struct device *dev, u32 regaddr,
	struct spi_master *master;
	int ret;

	master = spi_alloc_master(dev, sizeof(*mps));
	master = devm_spi_alloc_master(dev, sizeof(*mps));
	if (master == NULL)
		return -ENOMEM;

@@ -318,42 +318,24 @@ static int mpc52xx_psc_spi_do_probe(struct device *dev, u32 regaddr,
	master->cleanup = mpc52xx_psc_spi_cleanup;
	master->dev.of_node = dev->of_node;

	mps->psc = ioremap(regaddr, size);
	if (!mps->psc) {
		dev_err(dev, "could not ioremap I/O port range\n");
		ret = -EFAULT;
		goto free_master;
	}
	mps->psc = devm_ioremap(dev, regaddr, size);
	if (!mps->psc)
		return dev_err_probe(dev, -EFAULT, "could not ioremap I/O port range\n");
	/* On the 5200, fifo regs are immediately ajacent to the psc regs */
	mps->fifo = ((void __iomem *)mps->psc) + sizeof(struct mpc52xx_psc);

	ret = request_irq(mps->irq, mpc52xx_psc_spi_isr, 0, "mpc52xx-psc-spi",
				mps);
	ret = devm_request_irq(dev, mps->irq, mpc52xx_psc_spi_isr, 0,
			       "mpc52xx-psc-spi", mps);
	if (ret)
		goto free_master;
		return ret;

	ret = mpc52xx_psc_spi_port_config(master->bus_num, mps);
	if (ret < 0) {
		dev_err(dev, "can't configure PSC! Is it capable of SPI?\n");
		goto free_irq;
	}

	init_completion(&mps->done);

	ret = spi_register_master(master);
	if (ret < 0)
		goto free_irq;

	return ret;
		return dev_err_probe(dev, ret, "can't configure PSC! Is it capable of SPI?\n");

free_irq:
	free_irq(mps->irq, mps);
free_master:
	if (mps->psc)
		iounmap(mps->psc);
	spi_master_put(master);
	init_completion(&mps->done);

	return ret;
	return devm_spi_register_master(dev, master);
}

static int mpc52xx_psc_spi_of_probe(struct platform_device *op)
@@ -385,20 +367,6 @@ static int mpc52xx_psc_spi_of_probe(struct platform_device *op)
				irq_of_parse_and_map(op->dev.of_node, 0), id);
}

static int mpc52xx_psc_spi_of_remove(struct platform_device *op)
{
	struct spi_master *master = spi_master_get(platform_get_drvdata(op));
	struct mpc52xx_psc_spi *mps = spi_master_get_devdata(master);

	spi_unregister_master(master);
	free_irq(mps->irq, mps);
	if (mps->psc)
		iounmap(mps->psc);
	spi_master_put(master);

	return 0;
}

static const struct of_device_id mpc52xx_psc_spi_of_match[] = {
	{ .compatible = "fsl,mpc5200-psc-spi", },
	{ .compatible = "mpc5200-psc-spi", }, /* old */
@@ -409,7 +377,6 @@ MODULE_DEVICE_TABLE(of, mpc52xx_psc_spi_of_match);

static struct platform_driver mpc52xx_psc_spi_of_driver = {
	.probe = mpc52xx_psc_spi_of_probe,
	.remove = mpc52xx_psc_spi_of_remove,
	.driver = {
		.name = "mpc52xx-psc-spi",
		.of_match_table = mpc52xx_psc_spi_of_match,