spi: orion: use devm_clk_get_optional_enabled for axi clock

Replace the open-coded optional axi clock get/prepare/enable and the
manual cleanup in probe/remove/runtime_resume with the managed helper
devm_clk_get_optional_enabled(). This removes the now-unused
out_rel_axi_clk error path and simplifies the clock lifecycle.

Assisted-by: opencode:hy3-free
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://patch.msgid.link/20260716231411.1737001-1-rosenp@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Rosen Penev
2026-07-16 16:14:11 -07:00
committed by Mark Brown
parent 2c1c13da3a
commit 61c2eaa653

View File

@@ -691,12 +691,9 @@ static int orion_spi_probe(struct platform_device *pdev)
return PTR_ERR(spi->clk);
/* The following clock is only used by some SoCs */
spi->axi_clk = devm_clk_get(&pdev->dev, "axi");
if (PTR_ERR(spi->axi_clk) == -EPROBE_DEFER)
return -EPROBE_DEFER;
if (!IS_ERR(spi->axi_clk))
clk_prepare_enable(spi->axi_clk);
spi->axi_clk = devm_clk_get_optional_enabled(&pdev->dev, "axi");
if (IS_ERR(spi->axi_clk))
return PTR_ERR(spi->axi_clk);
tclk_hz = clk_get_rate(spi->clk);
@@ -719,10 +716,8 @@ static int orion_spi_probe(struct platform_device *pdev)
host->min_speed_hz = DIV_ROUND_UP(tclk_hz, devdata->max_divisor);
spi->base = devm_platform_get_and_ioremap_resource(pdev, 0, &r);
if (IS_ERR(spi->base)) {
status = PTR_ERR(spi->base);
goto out_rel_axi_clk;
}
if (IS_ERR(spi->base))
return PTR_ERR(spi->base);
for_each_available_child_of_node(pdev->dev.of_node, np) {
struct orion_direct_acc *dir_acc;
@@ -757,9 +752,8 @@ static int orion_spi_probe(struct platform_device *pdev)
dir_acc = &spi->child[cs].direct_access;
dir_acc->vaddr = devm_ioremap(&pdev->dev, r->start, PAGE_SIZE);
if (!dir_acc->vaddr) {
status = -ENOMEM;
of_node_put(np);
goto out_rel_axi_clk;
return -ENOMEM;
}
dir_acc->size = PAGE_SIZE;
@@ -789,8 +783,6 @@ static int orion_spi_probe(struct platform_device *pdev)
pm_runtime_put_noidle(&pdev->dev);
pm_runtime_set_suspended(&pdev->dev);
pm_runtime_dont_use_autosuspend(&pdev->dev);
out_rel_axi_clk:
clk_disable_unprepare(spi->axi_clk);
return status;
}
@@ -799,12 +791,10 @@ static int orion_spi_probe(struct platform_device *pdev)
static void orion_spi_remove(struct platform_device *pdev)
{
struct spi_controller *host = platform_get_drvdata(pdev);
struct orion_spi *spi = spi_controller_get_devdata(host);
spi_unregister_controller(host);
pm_runtime_get_sync(&pdev->dev);
clk_disable_unprepare(spi->axi_clk);
pm_runtime_disable(&pdev->dev);
pm_runtime_put_noidle(&pdev->dev);
@@ -830,8 +820,7 @@ static int orion_spi_runtime_resume(struct device *dev)
struct spi_controller *host = dev_get_drvdata(dev);
struct orion_spi *spi = spi_controller_get_devdata(host);
if (!IS_ERR(spi->axi_clk))
clk_prepare_enable(spi->axi_clk);
clk_prepare_enable(spi->axi_clk);
return clk_prepare_enable(spi->clk);
}
#endif