[PATCH] 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. Signed-off-by: Antonino Daplas <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
9127fa2859
commit
475666d4f8
1 changed files with 17 additions and 1 deletions
|
@ -827,7 +827,7 @@ int fb_parse_edid(unsigned char *edid, struct fb_var_screeninfo *var)
|
|||
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 *edid, struct fb_monspecs *specs)
|
|||
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");
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue