changeset 6798:7935d85facff

- fixed overflow by +-0x80 - save brightness/contrast values, so they won't be reset at next file
author arpi
date Thu, 25 Jul 2002 21:34:24 +0000
parents 06d29dbdf20d
children 60a7886834af
files drivers/mga_vid.c
diffstat 1 files changed, 9 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/drivers/mga_vid.c	Thu Jul 25 21:31:36 2002 +0000
+++ b/drivers/mga_vid.c	Thu Jul 25 21:34:24 2002 +0000
@@ -767,10 +767,8 @@
 	//Enable contrast and brightness control
 	regs.besglobctl |= (1<<5) + (1<<7);
 	
-	// brightness ; default is 0x7f;
-	regs.beslumactl = (mga_brightness << 16);
-	// contrast:
-	regs.beslumactl|= ((mga_contrast+0x80)<<0);
+	// brightness (-128..127) && contrast (0..255)
+	regs.beslumactl = (mga_brightness << 16) | ((mga_contrast+0x80)&0xFFFF);
 
 	//Setup destination window boundaries
 	besleft = x > 0 ? x : 0;
@@ -1263,7 +1261,10 @@
 		break;
 
 		case MGA_VID_GET_LUMA:
-			tmp = regs.beslumactl - 0x80;
+			//tmp = regs.beslumactl;
+			//tmp = (tmp&0xFFFF0000) | (((tmp&0xFFFF) - 0x80)&0xFFFF);
+			tmp = (mga_brightness << 16) | (mga_contrast&0xFFFF);
+
 			if (copy_to_user((uint32_t *) arg, &tmp, sizeof(uint32_t)))
 			{
 				printk(KERN_ERR "mga_vid: failed copy %p to userspace %p\n",
@@ -1274,7 +1275,9 @@
 			
 		case MGA_VID_SET_LUMA:
 			tmp = arg;
-			regs.beslumactl = tmp + 0x80;
+			mga_brightness=tmp>>16; mga_contrast=tmp&0xFFFF;
+			//regs.beslumactl = (tmp&0xFFFF0000) | ((tmp + 0x80)&0xFFFF);
+			regs.beslumactl = (mga_brightness << 16) | ((mga_contrast+0x80)&0xFFFF);
 			mga_vid_write_regs(0);
 		break;