video: fbmon: fixed E-EDID SVD entry parsing
Eric Laurent [Thu, 15 Sep 2011 17:30:46 +0000 (10:30 -0700)]
Fixed index calculation when parsing E-EDID block SVD entry
in fb_edid_add_monspecs().

Change-Id: I0273e2f29e86687607923d07faf99a30696f5ead
Signed-off-by: Eric Laurent <elaurent@google.com>

Rebase-Id: Rc55887d66002d58dcc5b602efb038a35807e6799

drivers/video/fbmon.c

index f4ad429..ec75802 100644 (file)
@@ -995,7 +995,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)
 {
@@ -1020,21 +1020,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];