Loading drivers/video/msm/mdss/mdss_dsi.c +30 −10 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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: Loading Loading @@ -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, Loading Loading @@ -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, Loading drivers/video/msm/mdss/mdss_dsi.h +4 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading
drivers/video/msm/mdss/mdss_dsi.c +30 −10 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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: Loading Loading @@ -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, Loading Loading @@ -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, Loading
drivers/video/msm/mdss/mdss_dsi.h +4 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading