linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] rivafb 0.7.2 weird colors (15bpp)
@ 2000-11-10 12:27 Bakonyi Ferenc
  0 siblings, 0 replies; only message in thread
From: Bakonyi Ferenc @ 2000-11-10 12:27 UTC (permalink / raw)
  To: Ani Joshi, Jindrich Makovicka; +Cc: linux-nvidia, linux-fbdev, linux-kernel



Please test this patch on TNT/TNT2 in 15bpp mode. It fixes some 
typos, and should correct the weird colors in 15bpp mode.

Regards:
	Ferenc Bakonyi

-------- cut here -------------
--- vanilla/linux/drivers/video/riva/fbdev.c	Mon Oct 16 23:40:54 2000
+++ linux/drivers/video/riva/fbdev.c	Thu Nov  9 20:56:58 2000
@@ -1,5 +1,5 @@
 /*
- * linux/drivers/video/rivafb.c - nVidia RIVA 128/TNT/TNT2 fb driver
+ * linux/drivers/video/fbdev.c - nVidia RIVA 128/TNT/TNT2 fb driver
  *
  * Maintained by Ani Joshi <ajoshi@shell.unixbox.com>
  *
@@ -17,12 +17,12 @@
  * KGI code provided the basis for state storage, init, and mode switching.
  *
  * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file README.legal in the main directory of this archive
+ * License.  See the file COPYING in the main directory of this archive
  * for more details.
  */
 
 /* version number of this driver */
-#define RIVAFB_VERSION "0.7.2"
+#define RIVAFB_VERSION "0.7.3"
 
 #include <linux/config.h>
 #include <linux/module.h>
@@ -311,7 +311,7 @@
 
 /**
  * riva_set_dispsw
- * @rivainfo: pointer to internal driver struct for a given Riva card
+ * @rinfo: pointer to internal driver struct for a given Riva card
  *
  * DESCRIPTION:
  * Sets up console Low level operations depending on the current? color depth
@@ -514,14 +514,14 @@
 	rinfo->ctrl_base = ioremap (rinfo->ctrl_base_phys,
 				    rinfo->base0_region_size);
 	if (!rinfo->ctrl_base) {
-		printk (KERN_ERR PFX "cannot ioremap ctrl base\n");
+		printk (KERN_ERR PFX "cannot ioremap MMIO base\n");
 		goto err_out_free_base1;
 	}
 	
 	rinfo->fb_base = ioremap (rinfo->fb_base_phys,
 				  rinfo->base1_region_size);
 	if (!rinfo->fb_base) {
-		printk (KERN_ERR PFX "cannot ioremap ctrl base\n");
+		printk (KERN_ERR PFX "cannot ioremap FB base\n");
 		goto err_out_iounmap_ctrl;
 	}
 	
@@ -539,7 +539,7 @@
 	switch (rinfo->riva.Architecture) {
 	case 3:
 		rinfo->riva.PRAMIN =
-		    (unsigned *) (rinfo->ctrl_base + 0x00C00000);
+		    (unsigned *) (rinfo->fb_base + 0x00C00000);
 		break;
 	case 4:
 	case 5:
@@ -584,7 +584,8 @@
 
 	pci_set_drvdata (pd, rinfo);
 
-	printk ("PCI Riva NV%d framebuffer ver %s (%s, %dMB @ 0x%lX)\n",
+	printk (KERN_INFO PFX
+		"PCI Riva NV%d framebuffer ver %s (%s, %dMB @ 0x%lX)\n",
 		rinfo->riva.Architecture,
 		RIVAFB_VERSION,
 		rinfo->drvr_name,
@@ -859,7 +860,7 @@
 		v.blue.offset = 0;
 #endif
 		v.red.length = 5;
-		v.green.length = 6;
+		v.green.length = 5;
 		v.blue.length = 5;
 		break;
 #endif
@@ -1046,7 +1047,7 @@
 /**
  * rivafb_pan_display
  * @var: standard kernel fb changeable data
- * @par: riva-specific hardware info about current video mode
+ * @con:
  * @info: pointer to rivafb_info object containing info for current riva board
  *
  * DESCRIPTION:
@@ -1292,7 +1293,7 @@
 {
 	struct rivafb_info *rivainfo = (struct rivafb_info *) info;
 
-	if (regno > 255)
+	if (regno >= riva_get_cmap_len(&rivainfo->currcon_display->var))
 		return 1;
 
 	*red = rivainfo->palette[regno].red;
@@ -1341,10 +1342,15 @@
 	assert (rivainfo != NULL);
 	assert (rivainfo->currcon_display != NULL);
 
-	if (regno > 255)
+	p = rivainfo->currcon_display;
+
+	if (regno >= riva_get_cmap_len(&p->var))
 		return -EINVAL;
 
-	p = rivainfo->currcon_display;
+	rivainfo->palette[regno].red = red;
+	rivainfo->palette[regno].green = green;
+	rivainfo->palette[regno].blue = blue;
+
 	if (p->var.grayscale) {
 		/* gray = 0.30*R + 0.59*G + 0.11*B */
 		red = green = blue =
@@ -1361,27 +1367,14 @@
 		break;
 	}
 
-#ifdef FBCON_HAS_CFB8
 	switch (p->var.bits_per_pixel) {
+#ifdef FBCON_HAS_CFB8
 	case 8:
 		/* "transparent" stuff is completely ignored. */
 		riva_wclut (regno, red >> shift, green >> shift, blue >> shift);
 		break;
-	default:
-		/* do nothing */
-		break;
-	}
 #endif				/* FBCON_HAS_CFB8 */
 
-	rivainfo->palette[regno].red = red;
-	rivainfo->palette[regno].green = green;
-	rivainfo->palette[regno].blue = blue;
-
-	if (regno >= 16)
-		return 0;
-
-	switch (p->var.bits_per_pixel) {
-
 #ifdef FBCON_HAS_CFB16
 	case 16:
 		assert (regno < 16);
@@ -1392,8 +1385,8 @@
 		    ((green & 0xf800) << 2) | ((blue & 0xf800) >> 3);
 #else
 		rivainfo->con_cmap.cfb16[regno] =
-		    ((red & 0xf800) >> 0) |
-		    ((green & 0xf800) >> 5) | ((blue & 0xf800) >> 11);
+		    ((red & 0xf800) >> 1) |
+		    ((green & 0xf800) >> 6) | ((blue & 0xf800) >> 11);
 #endif
 		break;
 #endif				/* FBCON_HAS_CFB16 */
-------- cut here -------------

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2000-11-10 12:29 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2000-11-10 12:27 [PATCH] rivafb 0.7.2 weird colors (15bpp) Bakonyi Ferenc

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).