From: "Antonino A. Daplas" - make firmware edid independent from framebuffer (No need to choose framebuffer just to disable this option - enable this option in X86_64 - check if VBE/DDC function is implemented before calling actual function Signed-off-by: Antonino Daplas Signed-off-by: Andrew Morton --- arch/i386/boot/video.S | 19 ++++++++++++++++++- arch/x86_64/boot/video.S | 19 +++++++++++++++++++ drivers/video/Kconfig | 31 +++++++++++++++---------------- drivers/video/fbmon.c | 2 +- 4 files changed, 53 insertions(+), 18 deletions(-) diff -puN arch/i386/boot/video.S~fbdev-firmware-edid-fixes arch/i386/boot/video.S --- devel/arch/i386/boot/video.S~fbdev-firmware-edid-fixes 2006-05-11 01:40:34.000000000 -0700 +++ devel-akpm/arch/i386/boot/video.S 2006-05-11 01:40:34.000000000 -0700 @@ -1929,7 +1929,7 @@ skip10: movb %ah, %al ret store_edid: -#ifdef CONFIG_FB_FIRMWARE_EDID +#ifdef CONFIG_FIRMWARE_EDID pushw %es # just save all registers pushw %ax pushw %bx @@ -1947,6 +1947,22 @@ store_edid: rep stosl + pushw %es # save ES + xorw %di, %di # Report Capability + pushw %di + popw %es # ES:DI must be 0:0 + movw $0x4f15, %ax + xorw %bx, %bx + xorw %cx, %cx + int $0x10 + popw %es # restore ES + + cmpb $0x00, %ah # call successful + jne no_edid + + cmpb $0x4f, %al # function supported + jne no_edid + movw $0x4f15, %ax # do VBE/DDC movw $0x01, %bx movw $0x00, %cx @@ -1954,6 +1970,7 @@ store_edid: movw $0x140, %di int $0x10 +no_edid: popw %di # restore all registers popw %dx popw %cx diff -puN arch/x86_64/boot/video.S~fbdev-firmware-edid-fixes arch/x86_64/boot/video.S --- devel/arch/x86_64/boot/video.S~fbdev-firmware-edid-fixes 2006-05-11 01:40:34.000000000 -0700 +++ devel-akpm/arch/x86_64/boot/video.S 2006-05-11 01:40:34.000000000 -0700 @@ -1929,6 +1929,7 @@ skip10: movb %ah, %al ret store_edid: +#ifdef CONFIG_FIRMWARE_EDID pushw %es # just save all registers pushw %ax pushw %bx @@ -1946,6 +1947,22 @@ store_edid: rep stosl + pushw %es # save ES + xorw %di, %di # Report Capability + pushw %di + popw %es # ES:DI must be 0:0 + movw $0x4f15, %ax + xorw %bx, %bx + xorw %cx, %cx + int $0x10 + popw %es # restore ES + + cmpb $0x00, %ah # call successful + jne no_edid + + cmpb $0x4f, %al # function supported + jne no_edid + movw $0x4f15, %ax # do VBE/DDC movw $0x01, %bx movw $0x00, %cx @@ -1953,12 +1970,14 @@ store_edid: movw $0x140, %di int $0x10 +no_edid: popw %di # restore all registers popw %dx popw %cx popw %bx popw %ax popw %es +#endif ret # VIDEO_SELECT-only variables diff -puN drivers/video/fbmon.c~fbdev-firmware-edid-fixes drivers/video/fbmon.c --- devel/drivers/video/fbmon.c~fbdev-firmware-edid-fixes 2006-05-11 01:40:34.000000000 -0700 +++ devel-akpm/drivers/video/fbmon.c 2006-05-11 01:40:34.000000000 -0700 @@ -1301,7 +1301,7 @@ int fb_validate_mode(const struct fb_var -EINVAL : 0; } -#if defined(CONFIG_FB_FIRMWARE_EDID) && defined(__i386__) +#if defined(CONFIG_FIRMWARE_EDID) && defined(CONFIG_X86) /* * We need to ensure that the EDID block is only returned for diff -puN drivers/video/Kconfig~fbdev-firmware-edid-fixes drivers/video/Kconfig --- devel/drivers/video/Kconfig~fbdev-firmware-edid-fixes 2006-05-11 01:40:34.000000000 -0700 +++ devel-akpm/drivers/video/Kconfig 2006-05-11 01:40:54.000000000 -0700 @@ -4,6 +4,21 @@ menu "Graphics support" +config FIRMWARE_EDID + bool "Enable firmware EDID" + default y + ---help--- + This enables access to the EDID transferred from the firmware. + On the i386, this is from the Video BIOS. Enable this if DDC/I2C + transfers do not work for your driver and if you are using + nvidiafb, i810fb or savagefb. + + In general, choosing Y for this option is safe. If you + experience extremely long delays while booting before you get + something on your display, try setting this to N. Matrox cards in + combination with certain motherboards and monitors are known to + suffer from this problem. + config FB tristate "Support for frame buffer devices" ---help--- @@ -70,22 +85,6 @@ config FB_MACMODES depends on FB default n -config FB_FIRMWARE_EDID - bool "Enable firmware EDID" - depends on FB - default y - ---help--- - This enables access to the EDID transferred from the firmware. - On the i386, this is from the Video BIOS. Enable this if DDC/I2C - transfers do not work for your driver and if you are using - nvidiafb, i810fb or savagefb. - - In general, choosing Y for this option is safe. If you - experience extremely long delays while booting before you get - something on your display, try setting this to N. Matrox cards in - combination with certain motherboards and monitors are known to - suffer from this problem. - config FB_BACKLIGHT bool depends on FB _