Skip to contentSkip to conversation

fbdev: Workaround for buggy EDID blocks

PATCH In review Antonino A. Daplas 1 participant 1 message Oct 18, 2005 Framebuffer layer

lore
Share & tools
lore
#0 lore raw

PATCH 10/17 fbdev: Workaround for buggy EDID blocks

Some EDID blocks set the flag "prefer first detailed timing" without providing any detailed timing at all. Clear this flag if the block does not provide detailed timings.

---
 fbmon.c |   18 +++++++++++++++++-
 1 files changed, 17 insertions(+), 1 deletion(-)
drivers/video/fbmon.c +17 -1
@@ -827,7 +827,7 @@ int fb_parse_edid(unsigned char *edid, s
 void fb_edid_to_monspecs(unsigned char *edid, struct fb_monspecs *specs)
 {
 	unsigned char *block;
-	int i;
+	int i, found = 0;
 
 	if (edid == NULL)
 		return;
@@ -869,6 +869,22 @@ void fb_edid_to_monspecs(unsigned char *
 	get_monspecs(edid, specs);
 
 	specs->modedb = fb_create_modedb(edid, &specs->modedb_len);
+
+	/*
+	 * Workaround for buggy EDIDs that sets that the first
+	 * detailed timing is preferred but has not detailed
+	 * timing specified
+	 */
+	for (i = 0; i < specs->modedb_len; i++) {
+		if (specs->modedb[i].flag & FB_MODE_IS_DETAILED) {
+			found = 1;
+			break;
+		}
+	}
+
+	if (!found)
+		specs->misc &= ~FB_MISC_1ST_DETAIL;
+
 	DPRINTK("========================================\n");
 }
 

-------------------------------------------------------
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions, and more. http://solutions.newsforge.com/ibmarch.tmpl