diff options
| author | Ujwal Patel <ujwalp@codeaurora.org> | 2012-09-18 15:17:07 -0700 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:12:40 -0700 |
| commit | de0a2d1a22ecbda292fddcadfea6217d4f2abf8d (patch) | |
| tree | d8d4cea5a2aeecaf02a060b495ae920a98cc0482 | |
| parent | 62b87aa3a20a8be8f994f859d9722b70975347de (diff) | |
msm: mdss: Fix EDID read failures in HDMI Tx controller
DDC data channel is used to read HDMI sink's EDID information.
Fix the request length for this read transactions to prevent
EDID read failures.
Change-Id: I74b2ce344cdd08721a78641a7553c85927a96831
Signed-off-by: Ujwal Patel <ujwalp@codeaurora.org>
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_hdmi_edid.c | 35 |
1 files changed, 13 insertions, 22 deletions
diff --git a/drivers/video/fbdev/msm/mdss_hdmi_edid.c b/drivers/video/fbdev/msm/mdss_hdmi_edid.c index 55f428ce417f..4eafcf7362a2 100644 --- a/drivers/video/fbdev/msm/mdss_hdmi_edid.c +++ b/drivers/video/fbdev/msm/mdss_hdmi_edid.c @@ -358,34 +358,25 @@ static int hdmi_edid_read_block(struct hdmi_edid_ctrl *edid_ctrl, int block, DEV_DBG("EDID: reading block(%d) with block-size=%d\n", block, block_size); for (i = 0; i < 0x80; i += block_size) { - /*Read EDID twice with 32bit alighnment too */ - if (block < 2) { - memset(&ddc_data, 0, sizeof(ddc_data)); - ddc_data.dev_addr = 0xA0; - ddc_data.offset = block*0x80 + i; - ddc_data.data_buf = edid_buf+i; - ddc_data.data_len = block_size; - ddc_data.retry = 1; - ddc_data.what = "EDID"; - ddc_data.no_align = false; + memset(&ddc_data, 0, sizeof(ddc_data)); + ddc_data.dev_addr = 0xA0; + ddc_data.offset = block*0x80 + i; + ddc_data.data_buf = edid_buf+i; + ddc_data.data_len = block_size; + ddc_data.request_len = block_size; + ddc_data.retry = 1; + ddc_data.what = "EDID"; + ddc_data.no_align = false; + /*Read EDID twice with 32bit alighnment too */ + if (block < 2) status = hdmi_ddc_read( edid_ctrl->init_data.ddc_ctrl, &ddc_data); - } else { - memset(&ddc_data, 0, sizeof(ddc_data)); - ddc_data.dev_addr = 0xA0; - ddc_data.offset = block*0x80 + i; - ddc_data.data_buf = edid_buf+i; - ddc_data.data_len = block_size; - ddc_data.request_len = block_size; - ddc_data.retry = 1; - ddc_data.what = "EDID"; - + else status = hdmi_ddc_read_seg( edid_ctrl->init_data.ddc_ctrl, &ddc_data); - } if (status) break; } @@ -413,7 +404,7 @@ static int hdmi_edid_read_block(struct hdmi_edid_ctrl *edid_ctrl, int block, } print_len = 0x80; - for (ndx = 0; ndx < print_len; ndx += 16) + for (ndx = 0; ndx < print_len; ndx += 4) DEV_DBG("EDID[%02x-%02x] %02x %02x %02x %02x\n", ndx, ndx+3, b[ndx+0], b[ndx+1], b[ndx+2], b[ndx+3]); |
