aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorAntonino Daplas <adaplas@hotpop.com>2004-08-22 22:52:54 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-08-22 22:52:54 -0700
commitebf4fd17653bea269594fa54c5aedc18efd3ffa7 (patch)
treef1d32ef493bdf0184b4b4aaf87dec3d2561a97dd /arch
parent216f473e2f7628a0d458766d9cbfd043fdef2cac (diff)
downloadhistory-ebf4fd17653bea269594fa54c5aedc18efd3ffa7.tar.gz
[PATCH] fbdev: use 8-bit DAC for capable hardware
The patch adds the ability for vesafb to switch the DAC from 6-bit to 8-bit at kernel boot. Besides fixing the failure to draw the 224-color logo, an 8-bit DAC will also provide a wider color range for user applications. Signed-off-by: Antonino Daplas <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/i386/boot/video.S36
1 files changed, 36 insertions, 0 deletions
diff --git a/arch/i386/boot/video.S b/arch/i386/boot/video.S
index 7e2c665e6a5304..a6e043c46e666e 100644
--- a/arch/i386/boot/video.S
+++ b/arch/i386/boot/video.S
@@ -232,6 +232,41 @@ mopar_gr:
xorl %eax, %eax
movw 18(%di), %ax
movl %eax, %fs:(PARAM_LFB_SIZE)
+
+# switching the DAC to 8-bit is for <= 8 bpp only
+ movw %fs:(PARAM_LFB_DEPTH), %ax
+ cmpw $8, %ax
+ jg dac_done
+
+# get DAC switching capability
+ xorl %eax, %eax
+ movb 10(%di), %al
+ testb $1, %al
+ jz dac_set
+
+# attempt to switch DAC to 8-bit
+ movw $0x4f08, %ax
+ movw $0x0800, %bx
+ int $0x10
+ cmpw $0x004f, %ax
+ jne dac_set
+ movb %bh, dac_size # store actual DAC size
+
+dac_set:
+# set color size to DAC size
+ movb dac_size, %al
+ movb %al, %fs:(PARAM_LFB_COLORS+0)
+ movb %al, %fs:(PARAM_LFB_COLORS+2)
+ movb %al, %fs:(PARAM_LFB_COLORS+4)
+ movb %al, %fs:(PARAM_LFB_COLORS+6)
+
+# set color offsets to 0
+ movb $0, %fs:(PARAM_LFB_COLORS+1)
+ movb $0, %fs:(PARAM_LFB_COLORS+3)
+ movb $0, %fs:(PARAM_LFB_COLORS+5)
+ movb $0, %fs:(PARAM_LFB_COLORS+7)
+
+dac_done:
# get protected mode interface informations
movw $0x4f0a, %ax
xorw %bx, %bx
@@ -1929,6 +1964,7 @@ scanning: .byte 0 # Performing mode scan
do_restore: .byte 0 # Screen contents altered during mode change
svga_prefix: .byte VIDEO_FIRST_BIOS>>8 # Default prefix for BIOS modes
graphic_mode: .byte 0 # Graphic mode with a linear frame buffer
+dac_size: .byte 6 # DAC bit depth
# Status messages
keymsg: .ascii "Press <RETURN> to see video modes available, "