[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: 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:
Antonino A. Daplas
2005-11-07 01:00:53 -08:00
committed by Linus Torvalds
parent 998e6d5116
commit 14c8102ffc

View File

@@ -538,6 +538,21 @@ static struct fb_videomode *fb_create_modedb(unsigned char *edid, int *dbsize)
*dbsize = 0; *dbsize = 0;
DPRINTK(" Detailed Timings\n");
block = edid + DETAILED_TIMING_DESCRIPTIONS_START;
for (i = 0; i < 4; i++, block+= DETAILED_TIMING_DESCRIPTION_SIZE) {
int first = 1;
if (!(block[0] == 0x00 && block[1] == 0x00)) {
get_detailed_timing(block, &mode[num]);
if (first) {
mode[num].flag |= FB_MODE_IS_FIRST;
first = 0;
}
num++;
}
}
DPRINTK(" Supported VESA Modes\n"); DPRINTK(" Supported VESA Modes\n");
block = edid + ESTABLISHED_TIMING_1; block = edid + ESTABLISHED_TIMING_1;
num += get_est_timing(block, &mode[num]); num += get_est_timing(block, &mode[num]);
@@ -547,24 +562,11 @@ static struct fb_videomode *fb_create_modedb(unsigned char *edid, int *dbsize)
for (i = 0; i < STD_TIMING; i++, block += STD_TIMING_DESCRIPTION_SIZE) for (i = 0; i < STD_TIMING; i++, block += STD_TIMING_DESCRIPTION_SIZE)
num += get_std_timing(block, &mode[num]); num += get_std_timing(block, &mode[num]);
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; if (block[0] == 0x00 && block[1] == 0x00 && block[3] == 0xfa)
if (block[0] == 0x00 && block[1] == 0x00) {
if (block[3] == 0xfa) {
num += get_dst_timing(block + 5, &mode[num]); num += get_dst_timing(block + 5, &mode[num]);
} }
} else {
get_detailed_timing(block, &mode[num]);
if (first) {
mode[num].flag |= FB_MODE_IS_FIRST;
first = 0;
}
num++;
}
}
/* Yikes, EDID data is totally useless */ /* Yikes, EDID data is totally useless */
if (!num) { if (!num) {