Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ba70710e authored by Antonino A. Daplas's avatar Antonino A. Daplas Committed by Linus Torvalds
Browse files

[PATCH] fbdev: Firmware EDID fixes



- 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: 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 026fbe16
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -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
+19 −0
Original line number Diff line number Diff line
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -109,6 +109,7 @@ struct sys_desc_table_struct {
};

struct edid_info edid_info;
EXPORT_SYMBOL_GPL(edid_info);
struct e820map e820;

extern int root_mountflags;
+15 −16
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -1301,7 +1301,7 @@ int fb_validate_mode(const struct fb_var_screeninfo *var, struct fb_info *info)
		-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