Commit 14c8102f authored by Antonino A. Daplas's avatar Antonino A. Daplas Committed by Linus Torvalds

[PATCH] fbdev: Rearrange mode database entries

Rearrange mode database entries such that preferred timings are entered first,
and less preferred timings are entered last.  (Detailed, VESA,
established/standard).
Signed-off-by: default avatarAntonino Daplas <adaplas@pol.net>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 998e6d51
...@@ -538,25 +538,12 @@ static struct fb_videomode *fb_create_modedb(unsigned char *edid, int *dbsize) ...@@ -538,25 +538,12 @@ static struct fb_videomode *fb_create_modedb(unsigned char *edid, int *dbsize)
*dbsize = 0; *dbsize = 0;
DPRINTK(" Supported VESA Modes\n");
block = edid + ESTABLISHED_TIMING_1;
num += get_est_timing(block, &mode[num]);
DPRINTK(" Standard Timings\n");
block = edid + STD_TIMING_DESCRIPTIONS_START;
for (i = 0; i < STD_TIMING; i++, block += STD_TIMING_DESCRIPTION_SIZE)
num += get_std_timing(block, &mode[num]);
DPRINTK(" Detailed Timings\n"); DPRINTK(" Detailed Timings\n");
block = edid + DETAILED_TIMING_DESCRIPTIONS_START; block = edid + DETAILED_TIMING_DESCRIPTIONS_START;
for (i = 0; i < 4; i++, block+= DETAILED_TIMING_DESCRIPTION_SIZE) { for (i = 0; i < 4; i++, block+= DETAILED_TIMING_DESCRIPTION_SIZE) {
int first = 1; int first = 1;
if (block[0] == 0x00 && block[1] == 0x00) { if (!(block[0] == 0x00 && block[1] == 0x00)) {
if (block[3] == 0xfa) {
num += get_dst_timing(block + 5, &mode[num]);
}
} else {
get_detailed_timing(block, &mode[num]); get_detailed_timing(block, &mode[num]);
if (first) { if (first) {
mode[num].flag |= FB_MODE_IS_FIRST; mode[num].flag |= FB_MODE_IS_FIRST;
...@@ -566,6 +553,21 @@ static struct fb_videomode *fb_create_modedb(unsigned char *edid, int *dbsize) ...@@ -566,6 +553,21 @@ static struct fb_videomode *fb_create_modedb(unsigned char *edid, int *dbsize)
} }
} }
DPRINTK(" Supported VESA Modes\n");
block = edid + ESTABLISHED_TIMING_1;
num += get_est_timing(block, &mode[num]);
DPRINTK(" Standard Timings\n");
block = edid + STD_TIMING_DESCRIPTIONS_START;
for (i = 0; i < STD_TIMING; i++, block += STD_TIMING_DESCRIPTION_SIZE)
num += get_std_timing(block, &mode[num]);
block = edid + DETAILED_TIMING_DESCRIPTIONS_START;
for (i = 0; i < 4; i++, block+= DETAILED_TIMING_DESCRIPTION_SIZE) {
if (block[0] == 0x00 && block[1] == 0x00 && block[3] == 0xfa)
num += get_dst_timing(block + 5, &mode[num]);
}
/* Yikes, EDID data is totally useless */ /* Yikes, EDID data is totally useless */
if (!num) { if (!num) {
kfree(mode); kfree(mode);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment