From 83adb17804d48ead8fc91a8ab7dda81db13b9444 Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Thu, 15 Sep 2011 10:30:46 -0700 Subject: video: fbmon: fixed E-EDID SVD entry parsing Fixed index calculation when parsing E-EDID block SVD entry in fb_edid_add_monspecs(). Change-Id: I0273e2f29e86687607923d07faf99a30696f5ead Signed-off-by: Eric Laurent --- drivers/video/fbmon.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'drivers') diff --git a/drivers/video/fbmon.c b/drivers/video/fbmon.c index 08ae0da08075..f3fa4469dedc 100644 --- a/drivers/video/fbmon.c +++ b/drivers/video/fbmon.c @@ -986,7 +986,7 @@ void fb_edid_to_monspecs(unsigned char *edid, struct fb_monspecs *specs) /** * fb_edid_add_monspecs() - add monitor video modes from E-EDID data * @edid: 128 byte array with an E-EDID block - * @spacs: monitor specs to be extended + * @specs: monitor specs to be extended */ void fb_edid_add_monspecs(unsigned char *edid, struct fb_monspecs *specs) { @@ -1011,21 +1011,23 @@ void fb_edid_add_monspecs(unsigned char *edid, struct fb_monspecs *specs) while (pos < edid[2]) { u8 len = edid[pos] & 0x1f, type = (edid[pos] >> 5) & 7; pr_debug("Data block %u of %u bytes\n", type, len); + + pos++; if (type == 2) { for (i = pos; i < pos + len; i++) { - u8 idx = edid[pos + i] & 0x7f; + u8 idx = edid[i] & 0x7f; svd[svd_n++] = idx; pr_debug("N%sative mode #%d\n", - edid[pos + i] & 0x80 ? "" : "on-n", idx); + edid[i] & 0x80 ? "" : "on-n", idx); } } else if (type == 3 && len >= 3) { - u32 ieee_reg = edid[pos + 1] | (edid[pos + 2] << 8) | - (edid[pos + 3] << 16); + u32 ieee_reg = edid[pos] | (edid[pos + 1] << 8) | + (edid[pos + 2] << 16); if (ieee_reg == 0x000c03) specs->misc |= FB_MISC_HDMI; } - pos += len + 1; + pos += len; } block = edid + edid[2]; -- cgit v1.2.3