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

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

Merge "disp: msm: vote for reg bus during rsc pm_runtime events"

parents 685240ed 386dd329
Loading
Loading
Loading
Loading
+26 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
#include <linux/of_platform.h>
#include <linux/module.h>
#include <linux/pm_runtime.h>
#include <linux/msm-bus.h>

#include <soc/qcom/rpmh.h>
#include <drm/drmP.h>
@@ -1317,6 +1318,7 @@ static int sde_rsc_runtime_suspend(struct device *dev)
{
	struct sde_rsc_priv *rsc = dev_get_drvdata(dev);
	struct dss_module_power *mp;
	u32 reg_bus_hdl;

	if (!rsc) {
		pr_err("invalid drv data\n");
@@ -1325,6 +1327,10 @@ static int sde_rsc_runtime_suspend(struct device *dev)

	mp = &rsc->phandle.mp;
	msm_dss_enable_clk(mp->clk_config, mp->num_clk, false);
	reg_bus_hdl = rsc->phandle.reg_bus_hdl;
	if (reg_bus_hdl)
		msm_bus_scale_client_update_request(reg_bus_hdl,
				VOTE_INDEX_DISABLE);
	msm_dss_enable_vreg(mp->vreg_config, mp->num_vreg, false);

	return 0;
@@ -1335,6 +1341,7 @@ static int sde_rsc_runtime_resume(struct device *dev)
	struct sde_rsc_priv *rsc = dev_get_drvdata(dev);
	struct dss_module_power *mp;
	int rc = 0;
	u32 reg_bus_hdl;

	if (!rsc) {
		pr_err("invalid drv data\n");
@@ -1348,12 +1355,30 @@ static int sde_rsc_runtime_resume(struct device *dev)
		goto end;
	}

	reg_bus_hdl = rsc->phandle.reg_bus_hdl;
	if (reg_bus_hdl) {
		rc = msm_bus_scale_client_update_request(reg_bus_hdl,
				VOTE_INDEX_LOW);
		if (rc) {
			pr_err("failed to set reg bus vote rc=%d\n", rc);
			goto reg_bus_hdl_err;
		}
	}

	rc = msm_dss_enable_clk(mp->clk_config, mp->num_clk, true);
	if (rc) {
		pr_err("clock enable failed rc:%d\n", rc);
		msm_dss_enable_vreg(mp->vreg_config, mp->num_vreg, false);
		goto clk_err;
	}

	return rc;

clk_err:
	if (reg_bus_hdl)
		msm_bus_scale_client_update_request(reg_bus_hdl,
				VOTE_INDEX_DISABLE);
reg_bus_hdl_err:
	msm_dss_enable_vreg(mp->vreg_config, mp->num_vreg, false);
end:
	return rc;
}