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

Commit c5328d54 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "disp: msm: dsi: Handle GDSC PM in pre/post clk on/off"

parents 938a758b f8c915ee
Loading
Loading
Loading
Loading
+2 −20
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
 * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
 */

#include <linux/of.h>
@@ -604,16 +604,10 @@ static int dsi_display_core_clk_enable(struct dsi_core_clks *clks,

	m_clks = &clks[master_ndx];

	rc = pm_runtime_get_sync(m_clks->clks.drm->dev);
	if (rc < 0) {
		DSI_ERR("Power resource enable failed, rc=%d\n", rc);
		goto error;
	}

	rc = dsi_core_clk_start(m_clks);
	if (rc) {
		DSI_ERR("failed to turn on master clocks, rc=%d\n", rc);
		goto error_disable_master_resource;
		goto error;
	}

	/* Turn on rest of the core clocks */
@@ -622,16 +616,9 @@ static int dsi_display_core_clk_enable(struct dsi_core_clks *clks,
		if (!clk || (clk == m_clks))
			continue;

		rc = pm_runtime_get_sync(m_clks->clks.drm->dev);
		if (rc < 0) {
			DSI_ERR("Power resource enable failed, rc=%d\n", rc);
			goto error_disable_master;
		}

		rc = dsi_core_clk_start(clk);
		if (rc) {
			DSI_ERR("failed to turn on clocks, rc=%d\n", rc);
			pm_runtime_put_sync(m_clks->clks.drm->dev);
			goto error_disable_master;
		}
	}
@@ -639,8 +626,6 @@ static int dsi_display_core_clk_enable(struct dsi_core_clks *clks,
error_disable_master:
	(void)dsi_core_clk_stop(m_clks);

error_disable_master_resource:
	pm_runtime_put_sync(m_clks->clks.drm->dev);
error:
	return rc;
}
@@ -741,8 +726,6 @@ static int dsi_display_core_clk_disable(struct dsi_core_clks *clks,
			DSI_DEBUG("failed to turn off clocks, rc=%d\n", rc);
			goto error;
		}

		pm_runtime_put_sync(m_clks->clks.drm->dev);
	}

	rc = dsi_core_clk_stop(m_clks);
@@ -751,7 +734,6 @@ static int dsi_display_core_clk_disable(struct dsi_core_clks *clks,
		goto error;
	}

	pm_runtime_put_sync(m_clks->clks.drm->dev);
error:
	return rc;
}
+17 −2
Original line number Diff line number Diff line
@@ -990,12 +990,19 @@ static int dsi_ctrl_enable_supplies(struct dsi_ctrl *dsi_ctrl, bool enable)
	int rc = 0;

	if (enable) {
		rc = pm_runtime_get_sync(dsi_ctrl->drm_dev->dev);
		if (rc < 0) {
			DSI_CTRL_ERR(dsi_ctrl,
				"Power resource enable failed, rc=%d\n", rc);
			goto error;
		}

		if (!dsi_ctrl->current_state.host_initialized) {
			rc = dsi_pwr_enable_regulator(
				&dsi_ctrl->pwr_info.host_pwr, true);
			if (rc) {
				DSI_CTRL_ERR(dsi_ctrl, "failed to enable host power regs\n");
				goto error;
				goto error_get_sync;
			}
		}

@@ -1008,8 +1015,9 @@ static int dsi_ctrl_enable_supplies(struct dsi_ctrl *dsi_ctrl, bool enable)
						&dsi_ctrl->pwr_info.host_pwr,
						false
						);
			goto error;
			goto error_get_sync;
		}
		return rc;
	} else {
		rc = dsi_pwr_enable_regulator(&dsi_ctrl->pwr_info.digital,
					      false);
@@ -1027,7 +1035,14 @@ static int dsi_ctrl_enable_supplies(struct dsi_ctrl *dsi_ctrl, bool enable)
				goto error;
			}
		}
		rc = pm_runtime_put_sync(dsi_ctrl->drm_dev->dev);
		if (rc < 0)
			DSI_CTRL_ERR(dsi_ctrl,
				"Power resource disable failed, rc=%d\n", rc);
		return rc;
	}
error_get_sync:
	pm_runtime_put_sync(dsi_ctrl->drm_dev->dev);
error:
	return rc;
}
+2 −2
Original line number Diff line number Diff line
@@ -3471,8 +3471,7 @@ int dsi_pre_clkon_cb(void *priv,
		 * Enable DSI core power
		 * 1.> PANEL_PM are controlled as part of
		 *     panel_power_ctrl. Needed not be handled here.
		 * 2.> CORE_PM are controlled by dsi clk manager.
		 * 3.> CTRL_PM need to be enabled/disabled
		 * 2.> CTRL_PM need to be enabled/disabled
		 *     only during unblank/blank. Their state should
		 *     not be changed during static screen.
		 */
@@ -5101,6 +5100,7 @@ static int dsi_display_bind(struct device *dev,

	display_for_each_ctrl(i, display) {
		display_ctrl = &display->ctrl[i];
		display_ctrl->ctrl->drm_dev = drm;

		if (!display_ctrl->phy || !display_ctrl->ctrl)
			continue;