From d3203f52479ae24005280bcf544d47723c55f684 Mon Sep 17 00:00:00 2001 From: Ujwal Patel Date: Wed, 10 Jun 2015 17:52:14 -0700 Subject: [PATCH] msm: mdss: fix compression ratio for logic for rotator and wfd Currently rotator driver is using input compression ratio for output. This is not correct because it is possible to have different input and output formats which changes compression ratios. Similarly for WFD, use output compression ratio passed by user-space. Change-Id: I63650bcbf9f02ddf3310aacdc27f009381775481 Signed-off-by: Ujwal Patel --- drivers/video/fbdev/msm/mdss_mdp.h | 5 ++++- drivers/video/fbdev/msm/mdss_mdp_ctl.c | 8 ++++---- drivers/video/fbdev/msm/mdss_mdp_wfd.c | 1 + drivers/video/fbdev/msm/mdss_rotator.c | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/drivers/video/fbdev/msm/mdss_mdp.h b/drivers/video/fbdev/msm/mdss_mdp.h index bd442b745f0c..6ac2fda390a3 100644 --- a/drivers/video/fbdev/msm/mdss_mdp.h +++ b/drivers/video/fbdev/msm/mdss_mdp.h @@ -259,9 +259,12 @@ struct mdss_mdp_ctl { u16 height; u16 border_x_off; u16 border_y_off; - u32 dst_format; bool is_secure; + /* used for WFD */ + u32 dst_format; + struct mult_factor dst_comp_ratio; + u32 clk_rate; int force_screen_state; struct mdss_mdp_perf_params cur_perf; diff --git a/drivers/video/fbdev/msm/mdss_mdp_ctl.c b/drivers/video/fbdev/msm/mdss_mdp_ctl.c index 55784c882602..686cde1009c6 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_ctl.c +++ b/drivers/video/fbdev/msm/mdss_mdp_ctl.c @@ -926,7 +926,7 @@ static void mdss_mdp_perf_calc_mixer(struct mdss_mdp_mixer *mixer, if (pinfo->type == WRITEBACK_PANEL) { fmt = mdss_mdp_get_format_params( - pinfo->out_format); + mixer->ctl->dst_format); if (fmt) bpp = fmt->bpp; pinfo = NULL; @@ -946,10 +946,10 @@ static void mdss_mdp_perf_calc_mixer(struct mdss_mdp_mixer *mixer, if (test_bit(MDSS_QOS_OVERHEAD_FACTOR, mdata->mdss_qos_map)) perf->bw_writeback = apply_overhead_factors( - perf->bw_writeback, - true, false, fmt, &pipe->comp_ratio); - /* for command mode, run as fast as the link allows us */ + perf->bw_writeback, true, false, fmt, + &mixer->ctl->dst_comp_ratio); } else if (pinfo->type == MIPI_CMD_PANEL) { + /* for cmd mode, run as fast as the link allows us */ u32 dsi_pclk_rate = pinfo->mipi.dsi_pclk_rate; if (is_pingpong_split(mixer->ctl->mfd)) diff --git a/drivers/video/fbdev/msm/mdss_mdp_wfd.c b/drivers/video/fbdev/msm/mdss_mdp_wfd.c index 1004de0f22de..5aba3f802f35 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_wfd.c +++ b/drivers/video/fbdev/msm/mdss_mdp_wfd.c @@ -193,6 +193,7 @@ int mdss_mdp_wfd_setup(struct mdss_mdp_wfd *wfd, } ctl->dst_format = layer->buffer.format; + ctl->dst_comp_ratio = layer->buffer.comp_ratio; ctl->width = layer->buffer.width; ctl->height = layer->buffer.height; ctl->roi = (struct mdss_rect) {0, 0, ctl->width, ctl->height}; diff --git a/drivers/video/fbdev/msm/mdss_rotator.c b/drivers/video/fbdev/msm/mdss_rotator.c index d9985a2c787a..a7fcb6d2f90c 100644 --- a/drivers/video/fbdev/msm/mdss_rotator.c +++ b/drivers/video/fbdev/msm/mdss_rotator.c @@ -1009,7 +1009,7 @@ static int mdss_rotator_calc_perf(struct mdss_rot_perf *perf) read_bw = mdss_apply_overhead_factors(read_bw, true, true, in_fmt, &config->input.comp_ratio); write_bw = mdss_apply_overhead_factors(write_bw, - true, false, out_fmt, &config->input.comp_ratio); + true, false, out_fmt, &config->output.comp_ratio); perf->bw = read_bw + write_bw; return 0;