diff options
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp.h | 2 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_overlay.c | 2 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_pipe.c | 4 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_pp.c | 38 |
4 files changed, 29 insertions, 17 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp.h b/drivers/video/fbdev/msm/mdss_mdp.h index 363d009c9768..dccf7d720a2b 100644 --- a/drivers/video/fbdev/msm/mdss_mdp.h +++ b/drivers/video/fbdev/msm/mdss_mdp.h @@ -1059,8 +1059,8 @@ int mdss_mdp_pp_resume(struct mdss_mdp_ctl *ctl, u32 mixer_num); int mdss_mdp_pp_setup(struct mdss_mdp_ctl *ctl); int mdss_mdp_pp_setup_locked(struct mdss_mdp_ctl *ctl); int mdss_mdp_pipe_pp_setup(struct mdss_mdp_pipe *pipe, u32 *op); +void mdss_mdp_pipe_pp_clear(struct mdss_mdp_pipe *pipe); int mdss_mdp_pipe_sspp_setup(struct mdss_mdp_pipe *pipe, u32 *op); -void mdss_mdp_pipe_sspp_term(struct mdss_mdp_pipe *pipe); int mdss_mdp_pp_sspp_config(struct mdss_mdp_pipe *pipe); int mdss_mdp_smp_setup(struct mdss_data_type *mdata, u32 cnt, u32 size); diff --git a/drivers/video/fbdev/msm/mdss_mdp_overlay.c b/drivers/video/fbdev/msm/mdss_mdp_overlay.c index 2f80ce0191cd..7f63e8e42709 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c +++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c @@ -904,7 +904,7 @@ int mdss_mdp_overlay_pipe_setup(struct msm_fb_data_type *mfd, if (pipe->type == MDSS_MDP_PIPE_TYPE_CURSOR) goto cursor_done; - mdss_mdp_pipe_sspp_term(pipe); + mdss_mdp_pipe_pp_clear(pipe); if (pipe->flags & MDP_OVERLAY_PP_CFG_EN) { memcpy(&pipe->pp_cfg, &req->overlay_pp_cfg, sizeof(struct mdp_overlay_pp_params)); diff --git a/drivers/video/fbdev/msm/mdss_mdp_pipe.c b/drivers/video/fbdev/msm/mdss_mdp_pipe.c index 63ce7fbec7bf..13372c242010 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_pipe.c +++ b/drivers/video/fbdev/msm/mdss_mdp_pipe.c @@ -928,8 +928,6 @@ static int mdss_mdp_pipe_init_config(struct mdss_mdp_pipe *pipe, if (pipe) { pr_debug("type=%x pnum=%d\n", pipe->type, pipe->num); - mutex_init(&pipe->pp_res.hist.hist_mutex); - spin_lock_init(&pipe->pp_res.hist.hist_lock); kref_init(&pipe->kref); INIT_LIST_HEAD(&pipe->buf_queue); @@ -1188,7 +1186,7 @@ static void mdss_mdp_pipe_free(struct kref *kref) mdss_mdp_pipe_panic_signal_ctrl(pipe, false); if (pipe->play_cnt) { mdss_mdp_pipe_fetch_halt(pipe); - mdss_mdp_pipe_sspp_term(pipe); + mdss_mdp_pipe_pp_clear(pipe); mdss_mdp_smp_free(pipe); } else { mdss_mdp_smp_unreserve(pipe); diff --git a/drivers/video/fbdev/msm/mdss_mdp_pp.c b/drivers/video/fbdev/msm/mdss_mdp_pp.c index bac89628ea77..2af9e9029502 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_pp.c +++ b/drivers/video/fbdev/msm/mdss_mdp_pp.c @@ -1260,22 +1260,36 @@ int mdss_mdp_pipe_pp_setup(struct mdss_mdp_pipe *pipe, u32 *op) return ret; } -void mdss_mdp_pipe_sspp_term(struct mdss_mdp_pipe *pipe) +void mdss_mdp_pipe_pp_clear(struct mdss_mdp_pipe *pipe) { struct pp_hist_col_info *hist_info; - if (pipe) { - if (pipe->pp_res.hist.col_en) { - hist_info = &pipe->pp_res.hist; - pp_hist_disable(hist_info); - } - kfree(pipe->pp_res.pa_cfg_payload); - kfree(pipe->pp_res.igc_cfg_payload); - kfree(pipe->pp_res.pcc_cfg_payload); - kfree(pipe->pp_res.hist_lut_cfg_payload); - memset(&pipe->pp_cfg, 0, sizeof(struct mdp_overlay_pp_params)); - memset(&pipe->pp_res, 0, sizeof(struct mdss_pipe_pp_res)); + if (!pipe) { + pr_err("Invalid pipe context passed, %p\n", + pipe); + return; } + + if (mdss_mdp_pipe_is_yuv(pipe)) { + hist_info = &pipe->pp_res.hist; + pp_hist_disable(hist_info); + } + + kfree(pipe->pp_res.pa_cfg_payload); + pipe->pp_res.pa_cfg_payload = NULL; + pipe->pp_cfg.pa_v2_cfg_data.cfg_payload = NULL; + kfree(pipe->pp_res.igc_cfg_payload); + pipe->pp_res.igc_cfg_payload = NULL; + pipe->pp_cfg.igc_cfg.cfg_payload = NULL; + kfree(pipe->pp_res.pcc_cfg_payload); + pipe->pp_res.pcc_cfg_payload = NULL; + pipe->pp_cfg.pcc_cfg_data.cfg_payload = NULL; + kfree(pipe->pp_res.hist_lut_cfg_payload); + pipe->pp_res.hist_lut_cfg_payload = NULL; + pipe->pp_cfg.hist_lut_cfg.cfg_payload = NULL; + + memset(&pipe->pp_res.pp_sts, 0, sizeof(struct pp_sts_type)); + pipe->pp_cfg.config_ops = 0; } int mdss_mdp_pipe_sspp_setup(struct mdss_mdp_pipe *pipe, u32 *op) |
