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

Commit 77c053d9 authored by Clarence Ip's avatar Clarence Ip
Browse files

msm: sde: allow rot_clk_src to be absent for sde rotator



The rot_clk_src clock request is no longer required
for newer targets. The rotator now supports targets
that do not have rot_clk_src defined and will use
rot_clk for clock requests on those targets.

CRs-Fixed: 2040987
Change-Id: Ic64ff535c4845ab8dc39159cf0e61094837f26c5
Signed-off-by: default avatarClarence Ip <cip@codeaurora.org>
parent 4db1ea89
Loading
Loading
Loading
Loading
+20 −11
Original line number Diff line number Diff line
@@ -293,7 +293,7 @@ static int sde_rotator_update_clk(struct sde_rot_mgr *mgr)

	SDEROT_DBG("core_clk %lu\n", total_clk_rate);
	ATRACE_INT("core_clk", total_clk_rate);
	sde_rotator_set_clk_rate(mgr, total_clk_rate, SDE_ROTATOR_CLK_ROT_CORE);
	sde_rotator_set_clk_rate(mgr, total_clk_rate, SDE_ROTATOR_CLK_MDSS_ROT);

	return 0;
}
@@ -405,14 +405,14 @@ int sde_rotator_clk_ctrl(struct sde_rot_mgr *mgr, int enable)
						SDE_ROTATOR_CLK_MDSS_AXI);
			if (ret)
				goto error_mdss_axi;
			ret = sde_rotator_enable_clk(mgr,
						SDE_ROTATOR_CLK_ROT_CORE);
			if (ret)
				goto error_rot_core;
			ret = sde_rotator_enable_clk(mgr,
						SDE_ROTATOR_CLK_MDSS_ROT);
			if (ret)
				goto error_mdss_rot;
			ret = sde_rotator_enable_clk(mgr,
						SDE_ROTATOR_CLK_MDSS_ROT_SUB);
			if (ret)
				goto error_rot_sub;

			/* Active+Sleep */
			msm_bus_scale_client_update_context(
@@ -420,8 +420,9 @@ int sde_rotator_clk_ctrl(struct sde_rot_mgr *mgr, int enable)
				mgr->data_bus.curr_bw_uc_idx);
			trace_rot_bw_ao_as_context(0);
		} else {
			sde_rotator_disable_clk(mgr,
					SDE_ROTATOR_CLK_MDSS_ROT_SUB);
			sde_rotator_disable_clk(mgr, SDE_ROTATOR_CLK_MDSS_ROT);
			sde_rotator_disable_clk(mgr, SDE_ROTATOR_CLK_ROT_CORE);
			sde_rotator_disable_clk(mgr, SDE_ROTATOR_CLK_MDSS_AXI);
			sde_rotator_disable_clk(mgr, SDE_ROTATOR_CLK_MDSS_AHB);
			sde_rotator_disable_clk(mgr, SDE_ROTATOR_CLK_GCC_AXI);
@@ -437,9 +438,9 @@ int sde_rotator_clk_ctrl(struct sde_rot_mgr *mgr, int enable)
	}

	return ret;
error_rot_sub:
	sde_rotator_disable_clk(mgr, SDE_ROTATOR_CLK_MDSS_ROT);
error_mdss_rot:
	sde_rotator_disable_clk(mgr, SDE_ROTATOR_CLK_ROT_CORE);
error_rot_core:
	sde_rotator_disable_clk(mgr, SDE_ROTATOR_CLK_MDSS_AXI);
error_mdss_axi:
	sde_rotator_disable_clk(mgr, SDE_ROTATOR_CLK_MDSS_AHB);
@@ -2730,11 +2731,19 @@ static int sde_rotator_parse_dt_clk(struct platform_device *pdev,
			sde_rotator_search_dt_clk(pdev, mgr, "axi_clk",
				SDE_ROTATOR_CLK_MDSS_AXI, true) ||
			sde_rotator_search_dt_clk(pdev, mgr, "rot_core_clk",
				SDE_ROTATOR_CLK_ROT_CORE, true) ||
			sde_rotator_search_dt_clk(pdev, mgr, "rot_clk",
				SDE_ROTATOR_CLK_MDSS_ROT, true))
				SDE_ROTATOR_CLK_MDSS_ROT, false))
		rc = -EINVAL;

	/*
	 * If 'MDSS_ROT' is already present, place 'rot_clk' under
	 * MDSS_ROT_SUB. Otherwise, place it directly into MDSS_ROT.
	 */
	if (sde_rotator_get_clk(mgr, SDE_ROTATOR_CLK_MDSS_ROT))
		rc = sde_rotator_search_dt_clk(pdev, mgr, "rot_clk",
				SDE_ROTATOR_CLK_MDSS_ROT_SUB, true);
	else
		rc = sde_rotator_search_dt_clk(pdev, mgr, "rot_clk",
				SDE_ROTATOR_CLK_MDSS_ROT, true);
clk_err:
	return rc;
}
+1 −1
Original line number Diff line number Diff line
@@ -125,7 +125,7 @@ enum sde_rotator_ts {
enum sde_rotator_clk_type {
	SDE_ROTATOR_CLK_MDSS_AHB,
	SDE_ROTATOR_CLK_MDSS_AXI,
	SDE_ROTATOR_CLK_ROT_CORE,
	SDE_ROTATOR_CLK_MDSS_ROT_SUB,
	SDE_ROTATOR_CLK_MDSS_ROT,
	SDE_ROTATOR_CLK_MNOC_AHB,
	SDE_ROTATOR_CLK_GCC_AHB,
+2 −2
Original line number Diff line number Diff line
@@ -3082,9 +3082,9 @@ int sde_rotator_r3_init(struct sde_rot_mgr *mgr)
		goto error_hw_rev_init;

	/* set rotator CBCR to shutoff memory/periphery on clock off.*/
	clk_set_flags(mgr->rot_clk[SDE_ROTATOR_CLK_ROT_CORE].clk,
	clk_set_flags(mgr->rot_clk[SDE_ROTATOR_CLK_MDSS_ROT].clk,
			CLKFLAG_NORETAIN_MEM);
	clk_set_flags(mgr->rot_clk[SDE_ROTATOR_CLK_ROT_CORE].clk,
	clk_set_flags(mgr->rot_clk[SDE_ROTATOR_CLK_MDSS_ROT].clk,
			CLKFLAG_NORETAIN_PERIPH);

	mdata->sde_rot_hw = rot;