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

Commit aa9a8d42 authored by Kalyan Thota's avatar Kalyan Thota Committed by Sandeep Panda
Browse files

msm: mdss: use irq type in PM QOS vote for DSI



In the current implementation, all CPUs are switched
on when PM QOS vote is requested from DSI.

Switching to irq based vote for QOS request, as this will
let other CPUs to go into idle PC apart from the CPU to
which the IRQ's affinity is set to.

Change-Id: I453fe21b19dc7771075006b986a9040c2f8285fe
Signed-off-by: default avatarKalyan Thota <kalyant@codeaurora.org>
parent 8f7d234e
Loading
Loading
Loading
Loading
+19 −9
Original line number Diff line number Diff line
@@ -45,19 +45,29 @@ static struct mdss_dsi_data *mdss_dsi_res;

static struct pm_qos_request mdss_dsi_pm_qos_request;

static void mdss_dsi_pm_qos_add_request(struct dsi_shared_data *sdata)
static void mdss_dsi_pm_qos_add_request(struct mdss_dsi_ctrl_pdata *ctrl_pdata)
{
	if (!sdata)
	struct irq_info *irq_info;

	if (!ctrl_pdata || !ctrl_pdata->shared_data)
		return;

	mutex_lock(&sdata->pm_qos_lock);
	if (!sdata->pm_qos_req_cnt) {
		pr_debug("%s: add request", __func__);
	irq_info = ctrl_pdata->dsi_hw->irq_info;

	if (!irq_info)
		return;

	mutex_lock(&ctrl_pdata->shared_data->pm_qos_lock);
	if (!ctrl_pdata->shared_data->pm_qos_req_cnt) {
		pr_debug("%s: add request irq\n", __func__);

		mdss_dsi_pm_qos_request.type = PM_QOS_REQ_AFFINE_IRQ;
		mdss_dsi_pm_qos_request.irq = irq_info->irq;
		pm_qos_add_request(&mdss_dsi_pm_qos_request,
			PM_QOS_CPU_DMA_LATENCY, PM_QOS_DEFAULT_VALUE);
	}
	sdata->pm_qos_req_cnt++;
	mutex_unlock(&sdata->pm_qos_lock);
	ctrl_pdata->shared_data->pm_qos_req_cnt++;
	mutex_unlock(&ctrl_pdata->shared_data->pm_qos_lock);
}

static void mdss_dsi_pm_qos_remove_request(struct dsi_shared_data *sdata)
@@ -3151,7 +3161,7 @@ static int mdss_dsi_ctrl_probe(struct platform_device *pdev)
	pr_info("%s: Dsi Ctrl->%d initialized, DSI rev:0x%x, PHY rev:0x%x\n",
		__func__, index, ctrl_pdata->shared_data->hw_rev,
		ctrl_pdata->shared_data->phy_rev);
	mdss_dsi_pm_qos_add_request(ctrl_pdata->shared_data);
	mdss_dsi_pm_qos_add_request(ctrl_pdata);

	if (index == 0)
		ctrl_pdata->shared_data->dsi0_active = true;