Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0c2b063f authored by Marek Szyprowski's avatar Marek Szyprowski Committed by Joerg Roedel
Browse files

iommu/exynos: Return proper errors from getting clocks



This patch reworks driver probe code to propagate error codes from
clk_get() operation. This will allow to properly handle deferred probe
in the future.

Signed-off-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
parent b54b874f
Loading
Loading
Loading
Loading
+24 −32
Original line number Diff line number Diff line
@@ -602,37 +602,31 @@ static int __init exynos_sysmmu_probe(struct platform_device *pdev)
	}

	data->clk = devm_clk_get(dev, "sysmmu");
	if (!IS_ERR(data->clk)) {
	if (PTR_ERR(data->clk) == -ENOENT)
		data->clk = NULL;
	else if (IS_ERR(data->clk))
		return PTR_ERR(data->clk);
	ret = clk_prepare(data->clk);
		if (ret) {
			dev_err(dev, "Failed to prepare clk\n");
	if (ret)
		return ret;
		}
	} else {
		data->clk = NULL;
	}

	data->aclk = devm_clk_get(dev, "aclk");
	if (!IS_ERR(data->aclk)) {
	if (PTR_ERR(data->aclk) == -ENOENT)
		data->aclk = NULL;
	else if (IS_ERR(data->aclk))
		return PTR_ERR(data->aclk);
	ret = clk_prepare(data->aclk);
		if (ret) {
			dev_err(dev, "Failed to prepare aclk\n");
	if (ret)
		return ret;
		}
	} else {
		data->aclk = NULL;
	}

	data->pclk = devm_clk_get(dev, "pclk");
	if (!IS_ERR(data->pclk)) {
	if (PTR_ERR(data->pclk) == -ENOENT)
		data->pclk = NULL;
	else if (IS_ERR(data->pclk))
		return PTR_ERR(data->pclk);
	ret = clk_prepare(data->pclk);
		if (ret) {
			dev_err(dev, "Failed to prepare pclk\n");
	if (ret)
		return ret;
		}
	} else {
		data->pclk = NULL;
	}

	if (!data->clk && (!data->aclk || !data->pclk)) {
		dev_err(dev, "Failed to get device clock(s)!\n");
@@ -640,15 +634,13 @@ static int __init exynos_sysmmu_probe(struct platform_device *pdev)
	}

	data->clk_master = devm_clk_get(dev, "master");
	if (!IS_ERR(data->clk_master)) {
	if (PTR_ERR(data->clk_master) == -ENOENT)
		data->clk_master = NULL;
	else if (IS_ERR(data->clk_master))
		return PTR_ERR(data->clk_master);
	ret = clk_prepare(data->clk_master);
		if (ret) {
			dev_err(dev, "Failed to prepare master's clk\n");
	if (ret)
		return ret;
		}
	} else {
		data->clk_master = NULL;
	}

	data->sysmmu = dev;
	spin_lock_init(&data->lock);