diff --git a/drivers/video/fbdev/msm/mdss_dp.c b/drivers/video/fbdev/msm/mdss_dp.c index ee0f43573c56..59c660002759 100644 --- a/drivers/video/fbdev/msm/mdss_dp.c +++ b/drivers/video/fbdev/msm/mdss_dp.c @@ -1450,6 +1450,12 @@ static int mdss_dp_notify_clients(struct mdss_dp_drv_pdata *dp, bool enable) return mdss_dp_send_cable_notification(dp, enable); } +static void mdss_dp_set_default_resolution(struct mdss_dp_drv_pdata *dp) +{ + hdmi_edid_set_video_resolution(dp->panel_data.panel_info.edid_data, + DEFAULT_VIDEO_RESOLUTION, true); +} + static int mdss_dp_edid_init(struct mdss_panel_data *pdata) { struct mdss_dp_drv_pdata *dp_drv = NULL; @@ -1484,6 +1490,8 @@ static int mdss_dp_edid_init(struct mdss_panel_data *pdata) dp_drv->edid_buf = edid_init_data.buf; dp_drv->edid_buf_size = edid_init_data.buf_size; + mdss_dp_set_default_resolution(dp_drv); + return 0; } @@ -1548,8 +1556,11 @@ static int mdss_dp_host_init(struct mdss_panel_data *pdata) mdss_dp_dpcd_cap_read(dp_drv); ret = mdss_dp_edid_read(dp_drv); - if (ret) + if (ret) { + pr_info("edid read error, setting default resolution\n"); + mdss_dp_set_default_resolution(dp_drv); goto edid_error; + } pr_debug("edid_read success. buf_size=%d\n", dp_drv->edid_buf_size); @@ -1560,14 +1571,13 @@ static int mdss_dp_host_init(struct mdss_panel_data *pdata) goto edid_error; } +edid_error: mdss_dp_update_cable_status(dp_drv, true); mdss_dp_notify_clients(dp_drv, true); dp_drv->dp_initialized = true; return ret; -edid_error: - mdss_dp_clk_ctrl(dp_drv, DP_CORE_PM, false); clk_error: mdss_dp_regulator_ctrl(dp_drv, false); mdss_dp_config_gpios(dp_drv, false); diff --git a/drivers/video/fbdev/msm/mdss_dp_aux.c b/drivers/video/fbdev/msm/mdss_dp_aux.c index 90afae40faa1..173851071b7a 100644 --- a/drivers/video/fbdev/msm/mdss_dp_aux.c +++ b/drivers/video/fbdev/msm/mdss_dp_aux.c @@ -770,8 +770,11 @@ int mdss_dp_edid_read(struct mdss_dp_drv_pdata *dp) pr_debug("blk_num=%d, rlen=%d\n", blk_num, rlen); if (dp_edid_is_valid_header(rp->data)) { - if (dp_edid_buf_error(rp->data, rp->len)) - continue; + ret = dp_edid_buf_error(rp->data, rp->len); + if (ret) { + pr_err("corrupt edid block detected\n"); + goto end; + } if (edid_parsing_done) { blk_num++; @@ -817,7 +820,7 @@ end: dp->test_data = (const struct dpcd_test_request){ 0 }; } - return 0; + return ret; } static void dp_sink_capability_read(struct mdss_dp_drv_pdata *ep,