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

Commit d45e9ffe authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: sps: Enable the clocks when BAMDMA available"

parents f75ba715 63356bea
Loading
Loading
Loading
Loading
+34 −24
Original line number Diff line number Diff line
@@ -2534,20 +2534,8 @@ static int msm_sps_probe(struct platform_device *pdev)
		goto device_create_err;
	}

	sps->dfab_clk = clk_get(sps->dev, "dfab_clk");
	if (IS_ERR(sps->dfab_clk)) {
		if (PTR_ERR(sps->dfab_clk) == -EPROBE_DEFER)
			ret = -EPROBE_DEFER;
		else
			SPS_ERR("sps:fail to get dfab_clk.");
		goto dfab_clk_err;
	} else {
		ret = clk_set_rate(sps->dfab_clk, 64000000);
		if (ret) {
			SPS_ERR("sps:failed to set dfab_clk rate.");
			goto dfab_clk_set_err;
		}
	}
	if (pdev->dev.of_node)
		sps->dev->of_node = pdev->dev.of_node;

	if (!d_type) {
		sps->pmem_clk = clk_get(sps->dev, "mem_clk");
@@ -2556,38 +2544,58 @@ static int msm_sps_probe(struct platform_device *pdev)
				ret = -EPROBE_DEFER;
			else
				SPS_ERR("sps:fail to get pmem_clk.");
			goto dfab_clk_set_err;
			goto pmem_clk_err;
		} else {
			ret = clk_prepare_enable(sps->pmem_clk);
			if (ret) {
				SPS_ERR("sps:failed to enable pmem_clk.");
				goto pmem_clk_set_err;
				goto pmem_clk_en_err;
			}
		}
	}

#ifdef CONFIG_SPS_SUPPORT_BAMDMA
	sps->dfab_clk = clk_get(sps->dev, "dfab_clk");
	if (IS_ERR(sps->dfab_clk)) {
		if (PTR_ERR(sps->dfab_clk) == -EPROBE_DEFER)
			ret = -EPROBE_DEFER;
		else
			SPS_ERR("sps:fail to get dfab_clk.");
		goto dfab_clk_err;
	} else {
		ret = clk_set_rate(sps->dfab_clk, 64000000);
		if (ret) {
			SPS_ERR("sps:failed to set dfab_clk rate.");
			clk_put(sps->dfab_clk);
			goto dfab_clk_err;
		}
	}

	sps->bamdma_clk = clk_get(sps->dev, "dma_bam_pclk");
	if (IS_ERR(sps->bamdma_clk)) {
		if (PTR_ERR(sps->bamdma_clk) == -EPROBE_DEFER)
			ret = -EPROBE_DEFER;
		else
			SPS_ERR("sps:fail to get bamdma_clk.");
		goto pmem_clk_set_err;
		clk_put(sps->dfab_clk);
		goto dfab_clk_err;
	} else {
		ret = clk_prepare_enable(sps->bamdma_clk);
		if (ret) {
			SPS_ERR("sps:failed to enable bamdma_clk. ret=%d", ret);
			clk_put(sps->bamdma_clk);
			goto pmem_clk_set_err;
			clk_put(sps->dfab_clk);
			goto dfab_clk_err;
		}
	}

	ret = clk_prepare_enable(sps->dfab_clk);
	if (ret) {
		SPS_ERR("sps:failed to enable dfab_clk. ret=%d", ret);
		clk_disable_unprepare(sps->bamdma_clk);
		clk_put(sps->bamdma_clk);
		goto pmem_clk_set_err;
		clk_put(sps->dfab_clk);
		goto dfab_clk_err;
	}
#endif
	ret = sps_device_init();
@@ -2597,8 +2605,9 @@ static int msm_sps_probe(struct platform_device *pdev)
		clk_disable_unprepare(sps->dfab_clk);
		clk_disable_unprepare(sps->bamdma_clk);
		clk_put(sps->bamdma_clk);
		clk_put(sps->dfab_clk);
#endif
		goto pmem_clk_set_err;
		goto dfab_clk_err;
	}
#ifdef CONFIG_SPS_SUPPORT_BAMDMA
	clk_disable_unprepare(sps->dfab_clk);
@@ -2609,12 +2618,13 @@ static int msm_sps_probe(struct platform_device *pdev)
	SPS_INFO("sps:sps is ready.");

	return 0;
pmem_clk_set_err:
dfab_clk_err:
	if (!d_type)
		clk_disable_unprepare(sps->pmem_clk);
pmem_clk_en_err:
	if (!d_type)
		clk_put(sps->pmem_clk);
dfab_clk_set_err:
	clk_put(sps->dfab_clk);
dfab_clk_err:
pmem_clk_err:
	device_destroy(sps->dev_class, sps->dev_num);
device_create_err:
	unregister_chrdev_region(sps->dev_num, 1);