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

Commit b2f17d82 authored by Veera Sundaram Sankaran's avatar Veera Sundaram Sankaran
Browse files

msm: mdss: fix clk_init and panel_cfg sequence in ctrl_probe



Currently, there is a circular dependency between clk init and
panel_cfg. This is due to the shadow_clk init in clk_init which
depends on dyn_fps, a panel specific parameter and refresh_clk
in panel_cfg which tries to refresh the clks before the clks are
initialized. Decouple the dependencies and fix the sequence to
avoid unnecessary error logs.

Change-Id: Icbcd1030b7f72e5e551be864b667e97c938500d0
Signed-off-by: default avatarVeera Sundaram Sankaran <veeras@codeaurora.org>
parent 266cc964
Loading
Loading
Loading
Loading
+17 −20
Original line number Diff line number Diff line
@@ -2297,7 +2297,6 @@ static int mdss_dsi_ctrl_clock_init(struct platform_device *ctrl_pdev,
{
	int rc = 0;
	struct mdss_dsi_clk_info info;
	struct mdss_panel_info *pinfo;
	struct mdss_dsi_clk_client client1 = {"dsi_clk_client"};
	struct mdss_dsi_clk_client client2 = {"mdp_event_client"};
	void *handle;
@@ -2307,17 +2306,6 @@ static int mdss_dsi_ctrl_clock_init(struct platform_device *ctrl_pdev,
		return -EPERM;
	}

	pinfo = &(ctrl_pdata->panel_data.panel_info);

	if (pinfo->dynamic_fps &&
			pinfo->dfps_update == DFPS_IMMEDIATE_CLK_UPDATE_MODE) {
		if (mdss_dsi_shadow_clk_init(ctrl_pdev, ctrl_pdata)) {
			pr_err("unable to initialize shadow ctrl clks\n");
			rc = -EPERM;
			goto error_link_clk_deinit;
		}
	}

	memset(&info, 0x0, sizeof(info));

	info.core_clks.mdp_core_clk = ctrl_pdata->shared_data->mdp_core_clk;
@@ -2341,7 +2329,7 @@ static int mdss_dsi_ctrl_clock_init(struct platform_device *ctrl_pdev,
		rc = PTR_ERR(ctrl_pdata->clk_mngr);
		ctrl_pdata->clk_mngr = NULL;
		pr_err("dsi clock registration failed, rc = %d\n", rc);
		goto error_shadow_clk_deinit;
		goto error_link_clk_deinit;
	}

	/*
@@ -2376,8 +2364,6 @@ error_clk_client_deregister:
	mdss_dsi_clk_deregister(ctrl_pdata->dsi_clk_handle);
error_clk_deinit:
	mdss_dsi_clk_deinit(ctrl_pdata);
error_shadow_clk_deinit:
	mdss_dsi_shadow_clk_deinit(&ctrl_pdev->dev, ctrl_pdata);
error_link_clk_deinit:
	mdss_dsi_link_clk_deinit(&ctrl_pdev->dev, ctrl_pdata);
	return rc;
@@ -2514,6 +2500,11 @@ static int mdss_dsi_ctrl_probe(struct platform_device *pdev)
	else
		ctrl_pdata->panel_data.panel_info.pdest = DISPLAY_2;

	if (mdss_dsi_ctrl_clock_init(pdev, ctrl_pdata)) {
		pr_err("%s: unable to initialize dsi clk manager\n", __func__);
		return -EPERM;
	}

	dsi_pan_node = mdss_dsi_config_panel(pdev);
	if (!dsi_pan_node) {
		pr_err("%s: panel configuration failed\n", __func__);
@@ -2542,10 +2533,15 @@ static int mdss_dsi_ctrl_probe(struct platform_device *pdev)
		goto error_pan_node;
	}

	if (mdss_dsi_ctrl_clock_init(pdev, ctrl_pdata)) {
		pr_err("%s: unable to initialize dsi clk manager\n", __func__);
	pinfo = &(ctrl_pdata->panel_data.panel_info);
	if (pinfo->dynamic_fps &&
			pinfo->dfps_update == DFPS_IMMEDIATE_CLK_UPDATE_MODE) {
		if (mdss_dsi_shadow_clk_init(pdev, ctrl_pdata)) {
			pr_err("%s: unable to initialize shadow ctrl clks\n",
					__func__);
			return -EPERM;
		}
	}

	rc = mdss_dsi_set_clk_rates(ctrl_pdata);
	if (rc) {
@@ -2553,7 +2549,6 @@ static int mdss_dsi_ctrl_probe(struct platform_device *pdev)
		return rc;
	}

	pinfo = &(ctrl_pdata->panel_data.panel_info);
	rc = mdss_dsi_cont_splash_config(pinfo, ctrl_pdata);
	if (rc) {
		pr_err("%s: Failed to set dsi splash config\n", __func__);
@@ -2567,7 +2562,7 @@ static int mdss_dsi_ctrl_probe(struct platform_device *pdev)
			"VSYNC_GPIO", ctrl_pdata);
		if (rc) {
			pr_err("TE request_irq failed.\n");
			goto error_pan_node;
			goto error_shadow_clk_deinit;
		}
		disable_irq(gpio_to_irq(ctrl_pdata->disp_te_gpio));
	}
@@ -2580,6 +2575,8 @@ static int mdss_dsi_ctrl_probe(struct platform_device *pdev)

	return 0;

error_shadow_clk_deinit:
	mdss_dsi_shadow_clk_deinit(&pdev->dev, ctrl_pdata);
error_pan_node:
	of_node_put(dsi_pan_node);
	return rc;