diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2016-10-27 15:49:01 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-10-27 15:49:00 -0700 |
commit | 206ef38970a19ca50e7ff3952e81094e67e473c2 (patch) | |
tree | 1e74c1b286c48c77072099275c5322295251aa20 /drivers | |
parent | 35021f91c88a24dc3947e4664d9a6a7f14f1ef07 (diff) | |
parent | 23022ae093d62d1c19a7145fe09425fc50b511b5 (diff) |
Merge "msm: mdss: edid: fix dtd parsing"
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/video/fbdev/msm/mdss_hdmi_edid.c | 86 |
1 files changed, 38 insertions, 48 deletions
diff --git a/drivers/video/fbdev/msm/mdss_hdmi_edid.c b/drivers/video/fbdev/msm/mdss_hdmi_edid.c index 2047a047b537..b90ac82049c6 100644 --- a/drivers/video/fbdev/msm/mdss_hdmi_edid.c +++ b/drivers/video/fbdev/msm/mdss_hdmi_edid.c @@ -831,14 +831,10 @@ static const u8 *hdmi_edid_find_block(const u8 *in_buf, u32 start_offset, u32 offset = start_offset; u32 dbc_offset = in_buf[2]; - if (dbc_offset >= EDID_BLOCK_SIZE - EDID_DTD_LEN) - return NULL; - *len = 0; - /* * * edid buffer 1, byte 2 being 4 means no non-DTD/Data block * collection present. - * * edid buffer 1, byte 2 being 0 menas no non-DTD/DATA block + * * edid buffer 1, byte 2 being 0 means no non-DTD/DATA block * collection present and no DTD data present. */ if ((dbc_offset == 0) || (dbc_offset == 4)) { @@ -858,8 +854,6 @@ static const u8 *hdmi_edid_find_block(const u8 *in_buf, u32 start_offset, } offset += 1 + block_len; } - DEV_WARN("%s: EDID: type=%d block not found in EDID block\n", - __func__, type); return NULL; } /* hdmi_edid_find_block */ @@ -1602,7 +1596,6 @@ static void hdmi_edid_detail_desc(struct hdmi_edid_ctrl *edid_ctrl, if (rc < 0) rc = hdmi_set_resv_timing_info(&timing); } else { - DEV_ERR("%s: Invalid frame data\n", __func__); rc = -EINVAL; } @@ -1611,7 +1604,6 @@ static void hdmi_edid_detail_desc(struct hdmi_edid_ctrl *edid_ctrl, DEV_DBG("%s: DTD mode found: %d\n", __func__, *disp_mode); } else { *disp_mode = HDMI_VFRMT_UNKNOWN; - DEV_ERR("%s: error adding mode from DTD: %d\n", __func__, rc); } } /* hdmi_edid_detail_desc */ @@ -1987,7 +1979,6 @@ static void hdmi_edid_get_display_mode(struct hdmi_edid_ctrl *edid_ctrl) u32 has60hz_mode = false; u32 has50hz_mode = false; u32 desc_offset = 0; - bool read_block0_res = false; struct hdmi_edid_sink_data *sink_data = NULL; if (!edid_ctrl) { @@ -2004,12 +1995,6 @@ static void hdmi_edid_get_display_mode(struct hdmi_edid_ctrl *edid_ctrl) hdmi_edid_find_block(data_buf+0x80, DBC_START_OFFSET, VIDEO_DATA_BLOCK, &len) : NULL; - if (num_of_cea_blocks && (len == 0 || len > MAX_DATA_BLOCK_SIZE)) { - DEV_DBG("%s: fall back to block 0 res\n", __func__); - svd = NULL; - read_block0_res = true; - } - sink_data = &edid_ctrl->sink_data; sink_data->disp_multi_3d_mode_list_cnt = 0; @@ -2059,20 +2044,21 @@ static void hdmi_edid_get_display_mode(struct hdmi_edid_ctrl *edid_ctrl) edid_blk0+0x36+desc_offset, &video_format); - DEV_DBG("[%s:%d] Block-0 Adding vid fmt = [%s]\n", - __func__, __LINE__, - msm_hdmi_mode_2string(video_format)); + if (video_format != HDMI_VFRMT_UNKNOWN) { + DEV_DBG("[%s:%d] Block-0 Adding vid fmt = [%s]\n", + __func__, __LINE__, + msm_hdmi_mode_2string(video_format)); - hdmi_edid_add_sink_video_format(edid_ctrl, - video_format); + hdmi_edid_add_sink_video_format(edid_ctrl, + video_format); - if (video_format == HDMI_VFRMT_640x480p60_4_3) - has480p = true; + if (video_format == HDMI_VFRMT_640x480p60_4_3) + has480p = true; - /* Make a note of the preferred video format */ - if (i == 0) { - sink_data->preferred_video_format = - video_format; + /* Make a note of the preferred video format */ + if (i == 0) + sink_data->preferred_video_format = + video_format; } desc_offset += 0x12; ++i; @@ -2088,28 +2074,32 @@ static void hdmi_edid_get_display_mode(struct hdmi_edid_ctrl *edid_ctrl) * * EDID_BLOCK_SIZE = 0x80 Each page size in the EDID ROM */ desc_offset = edid_blk1[0x02]; - i = 0; - while (!edid_blk1[desc_offset]) { - hdmi_edid_detail_desc(edid_ctrl, - edid_blk1+desc_offset, - &video_format); - - DEV_DBG("[%s:%d] Block-1 Adding vid fmt = [%s]\n", - __func__, __LINE__, - msm_hdmi_mode_2string(video_format)); - - hdmi_edid_add_sink_video_format(edid_ctrl, - video_format); - if (video_format == HDMI_VFRMT_640x480p60_4_3) - has480p = true; - - /* Make a note of the preferred video format */ - if (i == 0) { - sink_data->preferred_video_format = - video_format; + if (desc_offset < (EDID_BLOCK_SIZE - EDID_DTD_LEN)) { + i = 0; + while (!edid_blk1[desc_offset]) { + hdmi_edid_detail_desc(edid_ctrl, + edid_blk1+desc_offset, + &video_format); + + if (video_format != HDMI_VFRMT_UNKNOWN) { + DEV_DBG("%s Block-1 Adding vid fmt = [%s]\n", + __func__, + msm_hdmi_mode_2string(video_format)); + + hdmi_edid_add_sink_video_format(edid_ctrl, + video_format); + if (video_format == HDMI_VFRMT_640x480p60_4_3) + has480p = true; + + /* Make a note of the preferred video format */ + if (i == 0) { + sink_data->preferred_video_format = + video_format; + } + } + desc_offset += 0x12; + ++i; } - desc_offset += 0x12; - ++i; } std_blk = 0; |