summaryrefslogtreecommitdiff
path: root/drivers/video
diff options
context:
space:
mode:
authorAravind Venkateswaran <aravindh@codeaurora.org>2017-01-14 19:30:43 -0800
committerAravind Venkateswaran <aravindh@codeaurora.org>2017-01-19 14:41:50 -0800
commitcd78c3e01853e6ddce82186296ee1f802565692a (patch)
treed5d68ef828c105af0980bf135d0a814756bb7bee /drivers/video
parentdeb557f543ec2451d72fda72b6d63dc9adb2fdd9 (diff)
msm: mdss: dp: cap link based on maximum rate supported by the sink
Sink reports the maximum link rate that it supports as part of the DPCD information. When calculating the link clock rate, ensure that the calculated rate is always capped at the maximum rate supported by the sink. CRs-Fixed: 1109812 Change-Id: I563f3406606128b1bba705e6db33aa8ede8dbb7d Signed-off-by: Aravind Venkateswaran <aravindh@codeaurora.org>
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/fbdev/msm/mdss_dp.c12
-rw-r--r--drivers/video/fbdev/msm/mdss_dp.h2
-rw-r--r--drivers/video/fbdev/msm/mdss_dp_aux.c9
3 files changed, 11 insertions, 12 deletions
diff --git a/drivers/video/fbdev/msm/mdss_dp.c b/drivers/video/fbdev/msm/mdss_dp.c
index 5735f7566d53..eafe2ed93c34 100644
--- a/drivers/video/fbdev/msm/mdss_dp.c
+++ b/drivers/video/fbdev/msm/mdss_dp.c
@@ -1399,12 +1399,7 @@ int mdss_dp_on_hpd(struct mdss_dp_drv_pdata *dp_drv)
if (dp_drv->new_vic && (dp_drv->new_vic != dp_drv->vic))
dp_init_panel_info(dp_drv, dp_drv->new_vic);
- dp_drv->link_rate =
- mdss_dp_gen_link_clk(&dp_drv->panel_data.panel_info,
- dp_drv->dpcd.max_lane_count);
-
- pr_debug("link_rate=0x%x, Max rate supported by sink=0x%x\n",
- dp_drv->link_rate, dp_drv->dpcd.max_link_rate);
+ dp_drv->link_rate = mdss_dp_gen_link_clk(dp_drv);
if (!dp_drv->link_rate) {
pr_err("Unable to configure required link rate\n");
ret = -EINVAL;
@@ -1414,8 +1409,6 @@ int mdss_dp_on_hpd(struct mdss_dp_drv_pdata *dp_drv)
mdss_dp_phy_share_lane_config(&dp_drv->phy_io, dp_drv->orientation,
dp_drv->dpcd.max_lane_count);
- pr_debug("link_rate = 0x%x\n", dp_drv->link_rate);
-
ret = mdss_dp_enable_mainlink_clocks(dp_drv);
if (ret)
goto exit;
@@ -3141,8 +3134,7 @@ static bool mdss_dp_video_pattern_test_lt_needed(struct mdss_dp_drv_pdata *dp)
* 2. Lane count changes
* For now, assume that lane count is not going to change
*/
- new_link_rate = mdss_dp_gen_link_clk(&dp->panel_data.panel_info,
- dp->dpcd.max_lane_count);
+ new_link_rate = mdss_dp_gen_link_clk(dp);
pr_debug("new link rate = 0x%x, current link rate = 0x%x\n",
new_link_rate, dp->link_rate);
if (new_link_rate != dp->link_rate) {
diff --git a/drivers/video/fbdev/msm/mdss_dp.h b/drivers/video/fbdev/msm/mdss_dp.h
index d5e73e264f89..26bf771f8ea5 100644
--- a/drivers/video/fbdev/msm/mdss_dp.h
+++ b/drivers/video/fbdev/msm/mdss_dp.h
@@ -960,7 +960,7 @@ void mdss_dp_fill_link_cfg(struct mdss_dp_drv_pdata *ep);
void mdss_dp_sink_power_down(struct mdss_dp_drv_pdata *ep);
void mdss_dp_lane_power_ctrl(struct mdss_dp_drv_pdata *ep, int up);
void mdss_dp_config_ctrl(struct mdss_dp_drv_pdata *ep);
-char mdss_dp_gen_link_clk(struct mdss_panel_info *pinfo, char lane_cnt);
+char mdss_dp_gen_link_clk(struct mdss_dp_drv_pdata *dp);
int mdss_dp_aux_set_sink_power_state(struct mdss_dp_drv_pdata *ep, char state);
int mdss_dp_aux_send_psm_request(struct mdss_dp_drv_pdata *dp, bool enable);
void mdss_dp_aux_send_test_response(struct mdss_dp_drv_pdata *ep);
diff --git a/drivers/video/fbdev/msm/mdss_dp_aux.c b/drivers/video/fbdev/msm/mdss_dp_aux.c
index 1386adc8cc00..2b2a92a0326e 100644
--- a/drivers/video/fbdev/msm/mdss_dp_aux.c
+++ b/drivers/video/fbdev/msm/mdss_dp_aux.c
@@ -499,12 +499,14 @@ void dp_extract_edid_feature(struct edp_edid *edid, char *buf)
edid->dpm, edid->color_format);
};
-char mdss_dp_gen_link_clk(struct mdss_panel_info *pinfo, char lane_cnt)
+char mdss_dp_gen_link_clk(struct mdss_dp_drv_pdata *dp)
{
const u32 encoding_factx10 = 8;
const u32 ln_to_link_ratio = 10;
u32 min_link_rate, reminder = 0;
char calc_link_rate = 0;
+ struct mdss_panel_info *pinfo = &dp->panel_data.panel_info;
+ char lane_cnt = dp->dpcd.max_lane_count;
pr_debug("clk_rate=%llu, bpp= %d, lane_cnt=%d\n",
pinfo->clk_rate, pinfo->bpp, lane_cnt);
@@ -543,6 +545,11 @@ char mdss_dp_gen_link_clk(struct mdss_panel_info *pinfo, char lane_cnt)
calc_link_rate = DP_LINK_RATE_540;
}
+ pr_debug("calc_link_rate=0x%x, Max rate supported by sink=0x%x\n",
+ dp->link_rate, dp->dpcd.max_link_rate);
+ if (calc_link_rate > dp->dpcd.max_link_rate)
+ calc_link_rate = dp->dpcd.max_link_rate;
+ pr_debug("calc_link_rate = 0x%x\n", calc_link_rate);
return calc_link_rate;
}