linux-fbdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] uvesafb: fix color component length for pseudocolor modes
@ 2009-03-30 22:02 Michal Januszewski
  2009-04-01 16:54 ` Krzysztof Helt
  0 siblings, 1 reply; 2+ messages in thread
From: Michal Januszewski @ 2009-03-30 22:02 UTC (permalink / raw)
  To: linux-kernel
  Cc: Krzysztof Helt, Ville Syrjälä, Geert Uytterhoeven,
	linux-fbdev-devel

uvesafb incorrectly sets the length of the color fields to 6 bits
for PSEUDOCOLOR modes, even though 8 bits are always used per pixel.
Fix this by setting the length to 8.

The switch of the DAC width from the default 6 bits to 8 bits is
retained and tracked internally in the driver, but never exposed
to userspace.

Signed-off-by: Michal Januszewski <spock@gentoo.org>
Cc: Krzysztof Helt <krzysztof.h1@poczta.fm>
Cc: Ville Syrjälä <syrjala@sci.fi>
Cc: Geert Uytterhoeven <geert.uytterhoeven@gmail.com>
---
diff --git a/drivers/video/uvesafb.c b/drivers/video/uvesafb.c
index 74ae758..5b59198 100644
--- a/drivers/video/uvesafb.c
+++ b/drivers/video/uvesafb.c
@@ -55,6 +55,7 @@ static u16 maxvf	__devinitdata; /* maximum vertical frequency */
 static u16 maxhf	__devinitdata; /* maximum horizontal frequency */
 static u16 vbemode	__devinitdata; /* force use of a specific VBE mode */
 static char *mode_option __devinitdata;
+static u8  dac_width	= 6;
 
 static struct uvesafb_ktask *uvfb_tasks[UVESAFB_TASKS_MAX];
 static DEFINE_MUTEX(uvfb_lock);
@@ -303,22 +304,10 @@ static void uvesafb_setup_var(struct fb_var_screeninfo *var,
 		var->blue.offset   = 0;
 		var->transp.offset = 0;
 
-		/*
-		 * We're assuming that we can switch the DAC to 8 bits. If
-		 * this proves to be incorrect, we'll update the fields
-		 * later in set_par().
-		 */
-		if (par->vbe_ib.capabilities & VBE_CAP_CAN_SWITCH_DAC) {
-			var->red.length    = 8;
-			var->green.length  = 8;
-			var->blue.length   = 8;
-			var->transp.length = 0;
-		} else {
-			var->red.length    = 6;
-			var->green.length  = 6;
-			var->blue.length   = 6;
-			var->transp.length = 0;
-		}
+		var->red.length    = 8;
+		var->green.length  = 8;
+		var->blue.length   = 8;
+		var->transp.length = 0;
 	}
 }
 
@@ -1001,7 +990,7 @@ static int uvesafb_setcolreg(unsigned regno, unsigned red, unsigned green,
 		struct fb_info *info)
 {
 	struct uvesafb_pal_entry entry;
-	int shift = 16 - info->var.green.length;
+	int shift = 16 - dac_width;
 	int err = 0;
 
 	if (regno >= info->cmap.len)
@@ -1050,7 +1039,7 @@ static int uvesafb_setcolreg(unsigned regno, unsigned red, unsigned green,
 static int uvesafb_setcmap(struct fb_cmap *cmap, struct fb_info *info)
 {
 	struct uvesafb_pal_entry *entries;
-	int shift = 16 - info->var.green.length;
+	int shift = 16 - dac_width;
 	int i, err = 0;
 
 	if (info->var.bits_per_pixel == 8) {
@@ -1312,13 +1301,9 @@ setmode:
 		err = uvesafb_exec(task);
 		if (err || (task->t.regs.eax & 0xffff) != 0x004f ||
 		    ((task->t.regs.ebx & 0xff00) >> 8) != 8) {
-			/*
-			 * We've failed to set the DAC palette format -
-			 * time to correct var.
-			 */
-			info->var.red.length    = 6;
-			info->var.green.length  = 6;
-			info->var.blue.length   = 6;
+			dac_width = 6;
+		} else {
+			dac_width = 8;
 		}
 	}
 

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] uvesafb: fix color component length for pseudocolor modes
  2009-03-30 22:02 [PATCH] uvesafb: fix color component length for pseudocolor modes Michal Januszewski
@ 2009-04-01 16:54 ` Krzysztof Helt
  0 siblings, 0 replies; 2+ messages in thread
From: Krzysztof Helt @ 2009-04-01 16:54 UTC (permalink / raw)
  To: spock
  Cc: linux-kernel, Ville Syrjälä, Geert Uytterhoeven,
	linux-fbdev-devel

On Tue, 31 Mar 2009 00:02:46 +0200
Michal Januszewski <spock@gentoo.org> wrote:

> uvesafb incorrectly sets the length of the color fields to 6 bits
> for PSEUDOCOLOR modes, even though 8 bits are always used per pixel.
> Fix this by setting the length to 8.
> 
> The switch of the DAC width from the default 6 bits to 8 bits is
> retained and tracked internally in the driver, but never exposed
> to userspace.
> 
> Signed-off-by: Michal Januszewski <spock@gentoo.org>
> Cc: Krzysztof Helt <krzysztof.h1@poczta.fm>
> Cc: Ville Syrjälä <syrjala@sci.fi>
> Cc: Geert Uytterhoeven <geert.uytterhoeven@gmail.com>
> ---

Acked-by: Krzysztof Helt <krzysztof.h1@wp.pl>


 	
----------------------------------------------------------------------
Internetowe dowcipy na 1 kwietnia! Sprawdz! ;) 
http://link.interia.pl/f20f4

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-04-01 16:54 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-30 22:02 [PATCH] uvesafb: fix color component length for pseudocolor modes Michal Januszewski
2009-04-01 16:54 ` Krzysztof Helt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).