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

Commit 63356bea authored by Dipen Parmar's avatar Dipen Parmar
Browse files

msm: sps: Enable the clocks when BAMDMA available



The dfab and bamdma clocks are used only by bamdma.
Move the clocks api under bamdma option.

Update local device node data with platform device
node data from probe to avoid clock failures.

Change-Id: I97bd107eed400a989f0638c958f6361330bc6091
Signed-off-by: default avatarDipen Parmar <dipenp@codeaurora.org>
parent ce71070e
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);