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

Commit 6082ff43 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: mdss: enable ref count based PM_QOS request for DSI"

parents 184460e9 8f7d234e
Loading
Loading
Loading
Loading
+30 −10
Original line number Diff line number Diff line
@@ -45,18 +45,38 @@ 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(void)
static void mdss_dsi_pm_qos_add_request(struct dsi_shared_data *sdata)
{
	if (!sdata)
		return;

	mutex_lock(&sdata->pm_qos_lock);
	if (!sdata->pm_qos_req_cnt) {
		pr_debug("%s: add request", __func__);
	pm_qos_add_request(&mdss_dsi_pm_qos_request, PM_QOS_CPU_DMA_LATENCY,
			PM_QOS_DEFAULT_VALUE);
		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);
}

static void mdss_dsi_pm_qos_remove_request(void)
static void mdss_dsi_pm_qos_remove_request(struct dsi_shared_data *sdata)
{
	if (!sdata)
		return;

	mutex_lock(&sdata->pm_qos_lock);
	if (sdata->pm_qos_req_cnt) {
		sdata->pm_qos_req_cnt--;
		if (!sdata->pm_qos_req_cnt) {
			pr_debug("%s: remove request", __func__);
			pm_qos_remove_request(&mdss_dsi_pm_qos_request);
		}
	} else {
		pr_warn("%s: unbalanced pm_qos ref count\n", __func__);
	}
	mutex_unlock(&sdata->pm_qos_lock);
}

static void mdss_dsi_pm_qos_update_request(int val)
{
@@ -3131,14 +3151,13 @@ 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);

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

	mdss_dsi_pm_qos_add_request();

	return 0;

error_shadow_clk_deinit:
@@ -3335,6 +3354,7 @@ static int mdss_dsi_res_init(struct platform_device *pdev)
		}

		mutex_init(&sdata->phy_reg_lock);
		mutex_init(&sdata->pm_qos_lock);

		for (i = 0; i < DSI_CTRL_MAX; i++) {
			mdss_dsi_res->ctrl_pdata[i] = devm_kzalloc(&pdev->dev,
@@ -3605,7 +3625,7 @@ static int mdss_dsi_ctrl_remove(struct platform_device *pdev)
		return -ENODEV;
	}

	mdss_dsi_pm_qos_remove_request();
	mdss_dsi_pm_qos_remove_request(ctrl_pdata->shared_data);

	if (msm_dss_config_vreg(&pdev->dev,
			ctrl_pdata->panel_power_data.vreg_config,
+4 −0
Original line number Diff line number Diff line
@@ -279,6 +279,10 @@ struct dsi_shared_data {
	struct msm_bus_scale_pdata *bus_scale_table;
	u32 bus_handle;
	u32 bus_refcount;

	/* Shared mutex for pm_qos ref count */
	struct mutex pm_qos_lock;
	u32 pm_qos_req_cnt;
};

struct mdss_dsi_data {