[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Silicon Motion HEAD in 4.2.1 src



On Tue, Sep 17, 2002 at 08:19:25PM +0200, Martijn van de Streek wrote:
> The siliconmotion driver has been lacking XVideo support since the
> first 4.2.* prerelease debs, while the xpert list only talks of 'getting
> rid of the wait for retrace'
> (http://www.xfree86.org/pipermail/xpert/2002-April/016661.html) in 4.2.

*shrug* What I ship is what's tagged xf-4_2-branch.

> There's also a bug in the siliconmotion driver in "current" XFree86
> 4.2.1-pre debs: sometimes when the X server exits/gets killed/switches
> back to text mode I get a screen full of garbage and a hanging machine.

Well, I suggest you take this up with the Xpert list.

Just for grins I've attached the output of

xcvs diff -uN -r xf-4_2-branch -r HEAD xc/programs/Xserver/hw/xfree86/drivers/siliconmotion

-- 
G. Branden Robinson                |    If you wish to strive for peace of
Debian GNU/Linux                   |    soul, then believe; if you wish to
branden@debian.org                 |    be a devotee of truth, then
http://people.debian.org/~branden/ |    inquire.     -- Friedrich Nietzsche
Index: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/regsmi.h
===================================================================
RCS file: /home/branden/packages/xfree86/cvsup/xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/regsmi.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -u -r1.1 -r1.2
--- xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/regsmi.h	28 Nov 2000 20:59:19 -0000	1.1
+++ xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/regsmi.h	25 Jan 2002 21:56:09 -0000	1.2
@@ -26,7 +26,7 @@
 sale, use or other dealings in this Software without prior written
 authorization from the XFree86 Project and SIlicon Motion.
 */
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/regsmi.h,v 1.1 2000/11/28 20:59:19 dawes Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/regsmi.h,v 1.2 2002/01/25 21:56:09 tsi Exp $ */
 
 #ifndef _REGSMI_H
 #define _REGSMI_H
@@ -57,8 +57,8 @@
 	}
 	else
 	{
-		outb(indexPort, index);
-		return(inb(dataPort));
+		outb(pSmi->PIOBase + indexPort, index);
+		return(inb(pSmi->PIOBase + dataPort));
 	}
 }
 
@@ -72,8 +72,8 @@
 	}
 	else
 	{
-		outb(indexPort, index);
-		outb(dataPort, data);
+		outb(pSmi->PIOBase + indexPort, index);
+		outb(pSmi->PIOBase + dataPort, data);
 	}
 }
 
@@ -86,7 +86,7 @@
 	}
 	else
 	{
-		return(inb(port));
+		return(inb(pSmi->PIOBase + port));
 	}
 }
 
@@ -99,7 +99,7 @@
 	}
 	else
 	{
-		outb(port, data);
+		outb(pSmi->PIOBase + port, data);
 	}
 }
 
Index: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/siliconmotion.cpp
===================================================================
RCS file: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/siliconmotion.cpp
diff -N xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/siliconmotion.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/siliconmotion.cpp	24 Jan 2001 00:06:27 -0000	1.5
@@ -0,0 +1,195 @@
+.\" Header:   //Mercury/Projects/archives/XFree86/4.0/siliconmotion.cpp-arc   1.4   29 Nov 2000 14:12:56   Frido  $
+.\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/siliconmotion.cpp,v 1.5 2001/01/24 00:06:27 dawes dead $
+.\" shorthand for double quote that works everywhere.
+.ds q \N'34'
+.TH siliconmotion __drivermansuffix__ "Version 4.0.2"  "XFree86"
+.SH NAME
+siliconmotion \- Silicon Motion video driver
+.SH SYNOPSIS
+.B "Section \*qDevice\*q"
+.br
+.BI "  Identifier \*q"  devname \*q
+.br
+.B  "  Driver \*qsiliconmotion\*q"
+.br
+\ \ ...
+.br
+\ \ [
+.B "Option"
+"optionname" ["optionvalue"]]
+.br
+.B EndSection
+.SH DESCRIPTION
+.B siliconmotion 
+is an XFree86 driver for Silicon Motion based video cards.  The driver is fully
+accelerated, and provides support for the following framebuffer depths:
+8, 16, and 24.  All
+visual types are supported for depth 8, and TrueColor
+visuals are supported for the other depths.
+.SH SUPPORTED HARDWARE
+The
+.B siliconmotion
+driver supports PCI and AGP video cards based on the following Silicon Motion chips:
+.TP 12
+.B Lynx
+SM910
+.TP 12
+.B LynxE
+SM810
+.TP 12
+.B Lynx3D
+SM820
+.TP 12
+.B LynxEM
+SM710
+.TP 12
+.B LynxEM+
+SM712
+.TP 12
+.B Lynx3DM
+SM720
+.SH CONFIGURATION DETAILS
+Please refer to XF86Config(__filemansuffix__) for general configuration
+details.  This section only covers configuration details specific to this
+driver.  All options names are case and white space insensitive when
+parsed by the server, for example,  "lynxe" and "LynxE" are equivalent.
+.PP
+The driver auto-detects the chipset type, but the following
+.B ChipSet
+names may optionally be specified in the config file
+.B \*qDevice\*q
+section, and will override the auto-detection:
+.PP
+.RS 4
+"lynx", "lynxe", "lynx3d", "lynxem", "lynxem+", "lynx3dm".
+.RE
+
+.PP
+The following Cursor
+.B Options
+are supported:
+.TP
+.BI "Option \*qHWCursor\*q \*q" boolean \*q
+Enable or disable the HW cursor.  Default: on.
+.TP
+.BI "Option \*qSWCursor\*q \*q" boolean \*q
+Inverse of "HWCursor".  Default: off.
+
+.PP
+The following display
+.B Options
+are supported:
+.TP
+.BI "Option \*qShadowFB\*q \*q" boolean \*q
+Use shadow framebuffer.  Default: off.
+.TP
+.BI "Option \*qRotate\*q \*qCW\*q"
+.TP
+.BI "Option \*qRotate\*q \*qCCW\*q"
+Rotate the screen CW - clockwise or CCW - counter clockwise.
+Uses ShadowFB.  Default: no rotation.
+.TP
+.BI "Option \*qVideoKey\*q \*q" integer \*q
+Set the video color key.  Default: a little off full blue.
+.TP
+.BI "Option \*qByteSwap\*q \*q" boolean \*q
+Turn on byte swapping for capturing using SMI demo board.  Default: off.
+.TP
+.BI "Option \*qUseBIOS\*q \*q" boolean \*q
+Use the BIOS to set the modes. This is used for custom panel timings.
+Default: on.
+
+.PP
+The following video memory
+.B Options
+are supported:
+.TP
+.BI "Option \*qset_mclk\*q \*q" integer \*q
+sets the memory clock, where
+.I integer
+is in kHz, and
+.I integer
+<= 100000.  Default: probe the memory clock value,
+and use it at server start.
+
+
+.PP
+The following acceleration and graphics engine
+.B Options
+are supported:
+.TP
+.B "Option \*qNoAccel\*q"
+Disable acceleration.  Very useful for determining if the
+driver has problems with drawing and acceleration routines.  This is the first
+option to try if your server runs but you see graphic corruption on the screen.
+Using it decreases performance, as it uses software emulation for drawing
+operations the video driver can accelerate with hardware.
+Default: acceleration is enabled.
+.TP
+.B "Option \*qfifo_aggressive\*q"
+.TP
+.B "Option \*qfifo_moderate\*q"
+.TP
+.B "Option \*qfifo_conservative\*q"
+alter the settings
+for the threshold at which the pixel FIFO takes over the internal 
+memory bus to refill itself. The smaller this threshold, the better
+the acceleration performance of the card. You may try the fastest 
+setting
+.RB ( "fifo_aggressive" )
+and move down if you encounter pixel corruption.
+The optimal setting will probably depend on dot-clock and on color 
+depth. Note that specifying any of these options will also alter other
+memory settings which may increase performance, so trying
+.B "fifo_conservative"
+will in most cases be a slight benefit (this uses the chip defaults).
+If pixel corruption or transient streaking is observed during drawing
+operations then removing any fifo options is recommended.  Default: none.
+
+.PP
+The following PCI bus
+.B Options
+are supported:
+.TP
+.BI "Option \*qpci_burst\*q \*q" boolean \*q
+will enable PCI burst mode. This should work on all but a
+few broken PCI chipsets, and will increase performance.  Default: off.
+.TP
+.BI "Option \*qpci_retry\*q \*q" boolean \*q
+will allow the driver to rely on PCI Retry to program the 
+ViRGE registers. 
+.B "pci_burst"
+must be enabled for this to work. 
+This will increase performance, especially for small fills/blits, 
+because the driver does not have to poll the ViRGE before sending it 
+commands to make sure it is ready. It should work on most 
+recent PCI chipsets.  Default: off.
+
+.PP
+The following additional
+.B Options
+are supported:
+.TP
+.BI "Option \*qShowCache\*q \*q" boolean \*q
+Enable or disable viewing offscreen cache memory.  A
+development debug option.  Default: off.
+
+.SH SEE ALSO
+XFree86(1), XF86Config(__filemansuffix__), xf86config(1), Xserver(1), X(__miscmansuffix__)
+
+.SH SUPPORT
+For assistance with this driver, or XFree86 in general, check the XFree86 web
+site at http://www.xfree86.org.  A FAQ is available on the web site at
+http://www.xfree86.org/FAQ/.  If you find a problem with XFree86 or have a
+question not answered in the FAQ please use our bug report form available on
+the web site or send mail to XFree86@XFree86.org.  When reporting problems
+with the driver send as much detail as possible, including chipset type, a 
+server output log, and operating system specifics.
+
+.SH AUTHORS
+Kevin Brosius, 
+Matt Grossman, 
+Harald Koenig,
+Sebastien Marineau,
+Mark Vojkovich,
+Frido Garritsen.
Index: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi.h
===================================================================
RCS file: /home/branden/packages/xfree86/cvsup/xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi.h,v
retrieving revision 1.8
retrieving revision 1.11
diff -u -u -r1.8 -r1.11
--- xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi.h	20 Dec 2001 21:35:38 -0000	1.8
+++ xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi.h	16 Sep 2002 18:05:59 -0000	1.11
@@ -26,7 +26,7 @@
 sale, use or other dealings in this Software without prior written
 authorization from the XFree86 Project and Silicon Motion.
 */
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi.h,v 1.8 2001/12/20 21:35:38 eich Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi.h,v 1.11 2002/09/16 18:05:59 eich Exp $ */
 
 #ifndef _SMI_H
 #define _SMI_H
@@ -88,6 +88,7 @@
 /* Driver data structure; this should contain all needed info for a mode */
 typedef struct
 {
+	Bool    modeInit;
 	CARD16	mode;
 	CARD8	SR17, SR18, SR21, SR31, SR32, SR6A, SR6B, SR81, SRA0;
 	CARD8	CR33, CR33_2, CR3A;
@@ -149,6 +150,7 @@
 	CARD8 *			DataPortBase;	/* Base of data port */
 	int			DataPortSize;	/* Size of data port */
 	CARD8 *			IOBase;		/* Base of MMIO VGA ports */
+	IOADDRESS		PIOBase;	/* Base of I/O ports */
 	unsigned char *		FBBase;		/* Base of FB */
 	CARD32			FBOffset;	/* Current visual FB starting
 						   location */
@@ -210,8 +212,7 @@
 	int			lcdHeight;	/* LCD height */
 
 	I2CBusPtr		I2C;		/* Pointer into I2C module */
-	xf86Int10InfoPtr	pInt;		/* Pointer to INT10 module */
-	vbeInfoPtr		pVbe;		/* Pointer to VBE module */
+	xf86Int10InfoPtr	pInt10;		/* Pointer to INT10 module */
 
 	/* Shadow frame buffer (rotation) */
 	Bool			shadowFB;	/* Flag if shadow buffer is
Index: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_driver.c
===================================================================
RCS file: /home/branden/packages/xfree86/cvsup/xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_driver.c,v
retrieving revision 1.20
retrieving revision 1.26
diff -u -u -r1.20 -r1.26
--- xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_driver.c	4 Jan 2002 21:22:34 -0000	1.20
+++ xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_driver.c	16 Sep 2002 18:05:59 -0000	1.26
@@ -26,7 +26,7 @@
 sale, use or other dealings in this Software without prior written
 authorization from The XFree86 Project or Silicon Motion.
 */
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_driver.c,v 1.20 2002/01/04 21:22:34 tsi Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_driver.c,v 1.26 2002/09/16 18:05:59 eich Exp $ */
 
 #include "xf86Resources.h"
 #include "xf86RAC.h"
@@ -60,11 +60,11 @@
 static void SMI_Save (ScrnInfoPtr pScrn);
 static void SMI_WriteMode (ScrnInfoPtr pScrn, vgaRegPtr, SMIRegPtr);
 static Bool SMI_ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc,
-						   char **argv);
+                           char **argv);
 static int SMI_InternalScreenInit(int scrnIndex, ScreenPtr pScreen);
 static void SMI_PrintRegs(ScrnInfoPtr);
 static ModeStatus SMI_ValidMode(int scrnIndex, DisplayModePtr mode,
-								Bool verbose, int flags);
+                                Bool verbose, int flags);
 static void SMI_DisableVideo(ScrnInfoPtr pScrn);
 static void SMI_EnableVideo(ScrnInfoPtr pScrn);
 static Bool SMI_MapMem(ScrnInfoPtr pScrn);
@@ -73,9 +73,9 @@
 static Bool SMI_CloseScreen(int scrnIndex, ScreenPtr pScreen);
 static Bool SMI_SaveScreen(ScreenPtr pScreen, int mode);
 static void SMI_LoadPalette(ScrnInfoPtr pScrn, int numColors, int *indicies,
-							LOCO *colors, VisualPtr pVisual);
+                            LOCO *colors, VisualPtr pVisual);
 static void SMI_DisplayPowerManagementSet(ScrnInfoPtr pScrn,
-										  int PowerManagementMode, int flags);
+                                          int PowerManagementMode, int flags);
 static Bool SMI_ddc1(int scrnIndex);
 static unsigned int SMI_ddc1Read(ScrnInfoPtr pScrn);
 static void SMI_FreeScreen(int ScrnIndex, int flags);
@@ -83,15 +83,14 @@
 
 
 #define SILICONMOTION_NAME          "Silicon Motion"
-#define SILICONMOTION_DRIVER_NAME	"siliconmotion"
+#define SILICONMOTION_DRIVER_NAME   "siliconmotion"
 #define SILICONMOTION_VERSION_NAME  "1.3.1"
-#define SILICONMOTION_VERSION_MAJOR	1
+#define SILICONMOTION_VERSION_MAJOR 1
 #define SILICONMOTION_VERSION_MINOR 3
 #define SILICONMOTION_PATCHLEVEL    1
-#define SILICONMOTION_DRIVER_VERSION	( (SILICONMOTION_VERSION_MAJOR << 24)  \
-										| (SILICONMOTION_VERSION_MINOR << 16)  \
-										| (SILICONMOTION_PATCHLEVEL)		   \
-										)
+#define SILICONMOTION_DRIVER_VERSION ((SILICONMOTION_VERSION_MAJOR << 24) | \
+                                      (SILICONMOTION_VERSION_MINOR << 16) | \
+                                      (SILICONMOTION_PATCHLEVEL))
 
 /*
  * This contains the functions needed by the server after loading the
@@ -256,6 +255,7 @@
 	"xf86DestroyI2CDevRec",
 	"xf86I2CBusInit",
 	"xf86I2CDevInit",
+	"xf86I2CReadBytes",
 	"xf86I2CWriteByte",
 	NULL
 };
@@ -291,7 +291,6 @@
 	"cfbScreenInit",
 	"cfb16ScreenInit",
 	"cfb24ScreenInit",
-	"cfb24_32ScreenInit",
 	"cfb32ScreenInit",
 	"cfb16BresS",
 	"cfb24BresS",
@@ -518,7 +517,8 @@
 	int mclk;
 	vgaHWPtr hwp;
 	int vgaCRIndex, vgaCRReg, vgaIOBase;
-
+	vbeInfoPtr pVbe = NULL;
+	
 	ENTER_PROC("SMI_PreInit");
 
 	if (flags & PROBE_DETECT)
@@ -859,17 +859,22 @@
 		LEAVE_PROC("SMI_PreInit");
 		return(FALSE);
 	}
+
+	if (xf86LoadSubModule(pScrn,"int10")) {
+	    xf86LoaderReqSymLists(int10Symbols,NULL);
+	    pSmi->pInt10 = xf86InitInt10(pEnt->index);
+	}
 	
-	if (xf86LoadSubModule(pScrn, "vbe"))
+	if (pSmi->pInt10 && xf86LoadSubModule(pScrn, "vbe"))
 	{
-		xf86LoaderReqSymLists(vbeSymbols, NULL);
-		pSmi->pVbe = VBEInit(NULL, pEnt->index);
+	    xf86LoaderReqSymLists(vbeSymbols, NULL);
+	    pVbe = VBEInit(pSmi->pInt10, pEnt->index);
 	}
 
 	pSmi->PciInfo = xf86GetPciInfoForEntity(pEnt->index);
 	xf86RegisterResources(pEnt->index, NULL, ResExclusive);
-/*	xf86SetOperatingState(RES_SHARED_VGA, pEnt->index, ResUnusedOpr);*/
-/*	xf86SetOperatingState(resVgaMemShared, pEnt->index, ResDisableOpr);*/
+/*	xf86SetOperatingState(resVgaIo, pEnt->index, ResUnusedOpr); */
+/*	xf86SetOperatingState(resVgaMem, pEnt->index, ResDisableOpr); */
 
 	/*
 	 * Set the Chipset and ChipRev, allowing config file entries to
@@ -939,6 +944,7 @@
 	vgaIOBase  = hwp->IOBase;
 	vgaCRIndex = vgaIOBase + VGA_CRTC_INDEX_OFFSET;
 	vgaCRReg   = vgaIOBase + VGA_CRTC_DATA_OFFSET;
+	pSmi->PIOBase = hwp->PIOOffset;
 
 	xf86ErrorFVerb(VERBLEV, "\tSMI_PreInit vgaCRIndex=%x, vgaIOBase=%x, "
 			"MMIOBase=%x\n", vgaCRIndex, vgaIOBase, hwp->MMIOBase);
@@ -957,9 +963,9 @@
 
 		xf86LoaderReqSymLists(ddcSymbols, NULL);
 #if 1 /* PDR#579 */
-		if (pSmi->pVbe)
+		if (pVbe)
 		{
-			pMon = vbeDoEDID(pSmi->pVbe, NULL);
+			pMon = vbeDoEDID(pVbe, NULL);
 			if (pMon != NULL)
 			{
 				if (   (pMon->rawData[0] == 0x00)
@@ -981,8 +987,8 @@
 			}
 		}
 #else
-		if (   (pSmi->pVbe)
-			&& ((pMon = xf86PrintEDID(vbeDoEDID(pSmi->pVbe, NULL))) != NULL)
+		if (   (pVbe)
+			&& ((pMon = xf86PrintEDID(vbeDoEDID(pVbe, NULL))) != NULL)
 		)
 		{
 			xf86SetDDCproperties(pScrn, pMon);
@@ -998,11 +1004,10 @@
 			}
 		}
 	}
-	if (pSmi->pVbe)
-	{
-		vbeFree(pSmi->pVbe);
-		pSmi->pVbe = NULL;
-	}
+
+	vbeFree(pVbe);
+	xf86FreeInt10(pSmi->pInt10);
+	pSmi->pInt10 = NULL;
 
 	/*
 	 * If the driver can do gamma correction, it should call xf86SetGamma()
@@ -1509,12 +1514,12 @@
 		pSmi->ModeStructInit = TRUE;
 	}
 
-	if (pSmi->useBIOS && (pSmi->pVbe != NULL))
+	if (pSmi->useBIOS && (pSmi->pInt10 != NULL))
 	{
-		pSmi->pVbe->pInt10->num = 0x10;
-		pSmi->pVbe->pInt10->ax = 0x0F00;
-		xf86ExecX86int10(pSmi->pVbe->pInt10);
-		save->mode = pSmi->pVbe->pInt10->ax & 0x007F;
+		pSmi->pInt10->num = 0x10;
+		pSmi->pInt10->ax = 0x0F00;
+		xf86ExecX86int10(pSmi->pInt10);
+		save->mode = pSmi->pInt10->ax & 0x007F;
 		xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Current mode 0x%02X.\n",
 				save->mode);
 	}
@@ -1554,19 +1559,19 @@
 	/* Wait for engine to become idle */
 	WaitIdle();
 
-	if (pSmi->useBIOS && (pSmi->pVbe->pInt10 != NULL)
+	if (pSmi->useBIOS && (pSmi->pInt10 != NULL)
 	    && (restore->mode != 0))
 	{
-		pSmi->pVbe->pInt10->num = 0x10;
-		pSmi->pVbe->pInt10->ax = restore->mode | 0x80;
+		pSmi->pInt10->num = 0x10;
+		pSmi->pInt10->ax = restore->mode | 0x80;
 		xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Setting mode 0x%02X\n",
 				restore->mode);
-		xf86ExecX86int10(pSmi->pVbe->pInt10);
+		xf86ExecX86int10(pSmi->pInt10);
 
 		/* Enable linear mode. */
-		outb(VGA_SEQ_INDEX, 0x18);
-		tmp = inb(VGA_SEQ_DATA);
-		outb(VGA_SEQ_DATA, tmp | 0x01);
+		outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x18);
+		tmp = inb(pSmi->PIOBase + VGA_SEQ_DATA);
+		outb(pSmi->PIOBase + VGA_SEQ_DATA, tmp | 0x01);
 
 		/* Enable DPR/VPR registers. */
 		tmp = VGAIN8_INDEX(pSmi, VGA_SEQ_INDEX, VGA_SEQ_DATA, 0x21);
@@ -1662,14 +1667,13 @@
 		}
 
 		/* Restore the standard VGA registers */
-		if (xf86IsPrimaryPci(pSmi->PciInfo))
-		{
-			vgaHWRestore(pScrn, vgaSavePtr, VGA_SR_ALL);
-		}
-		else
-		{
-			vgaHWRestore(pScrn, vgaSavePtr, VGA_SR_MODE);
-		}
+		if (xf86IsPrimaryPci(pSmi->PciInfo)) {
+		    vgaHWRestore(pScrn, vgaSavePtr, VGA_SR_CMAP 
+				 | VGA_SR_FONTS);
+		} 
+
+		if (restore->modeInit)
+		    vgaHWRestore(pScrn, vgaSavePtr, VGA_SR_MODE);
 
 		if (!SMI_LYNXM_SERIES(pSmi->Chipset))
 		{
@@ -1981,12 +1985,13 @@
 
 	pEnt = xf86GetEntityInfo(pScrn->entityList[0]);
 	
+	if (!pSmi->pInt10) {
+	    pSmi->pInt10 = xf86InitInt10(pEnt->index);
+	}
+
 	/* Save the chip/graphics state */
 	SMI_Save(pScrn);
 	
-	if (!pSmi->pVbe) {
-	    pSmi->pVbe = VBEInit(NULL, pEnt->index);
-	}
 	/* Zero the frame buffer, #258 */
 	memset(pSmi->FBBase, 0, pSmi->videoRAMBytes);
 
@@ -2400,6 +2405,8 @@
 		return(FALSE);
 	}
 
+	new->modeInit = TRUE;
+
 	if (pSmi->rotate)
 	{
 		pSmi->width  = pScrn->virtualY;
@@ -2412,8 +2419,8 @@
 	}
 	pSmi->Bpp    = pScrn->bitsPerPixel / 8;
 
-	outb(VGA_SEQ_INDEX, 0x17);
-	tmp = inb(VGA_SEQ_DATA);
+	outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x17);
+	tmp = inb(pSmi->PIOBase + VGA_SEQ_DATA);
 	if (pSmi->pci_burst)
 	{
 		new->SR17 = tmp | 0x20;
@@ -2423,17 +2430,17 @@
 		new->SR17 = tmp & ~0x20;
 	}
 
-	outb(VGA_SEQ_INDEX, 0x18);
-	new->SR18 = inb(VGA_SEQ_DATA) | 0x11;
+	outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x18);
+	new->SR18 = inb(pSmi->PIOBase + VGA_SEQ_DATA) | 0x11;
 
-	outb(VGA_SEQ_INDEX, 0x21);
-	new->SR21 = inb(VGA_SEQ_DATA) & ~0x03;
+	outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x21);
+	new->SR21 = inb(pSmi->PIOBase + VGA_SEQ_DATA) & ~0x03;
 
-	outb(VGA_SEQ_INDEX, 0x31);
-	new->SR31 = inb(VGA_SEQ_DATA) & ~0xC0;
+	outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x31);
+	new->SR31 = inb(pSmi->PIOBase + VGA_SEQ_DATA) & ~0xC0;
 
-	outb(VGA_SEQ_INDEX, 0x32);
-	new->SR32 = inb(VGA_SEQ_DATA) & ~0x07;
+	outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x32);
+	new->SR32 = inb(pSmi->PIOBase + VGA_SEQ_DATA) & ~0x07;
 	if (SMI_LYNXM_SERIES(pSmi->Chipset))
 	{
 		new->SR32 |= 0x04;
@@ -2539,11 +2546,10 @@
 		}
 	}
 
-
-    /* CZ 2.11.2001: for gamma correction (TODO: other chipsets?) */
-    new->CCR66 = VGAIN8_INDEX(pSmi, VGA_SEQ_INDEX, VGA_SEQ_DATA, 0x66);
-    if (pSmi->Chipset == SMI_LYNX3DM) {
-        switch (pScrn->bitsPerPixel) {
+	/* CZ 2.11.2001: for gamma correction (TODO: other chipsets?) */
+	new->CCR66 = VGAIN8_INDEX(pSmi, VGA_SEQ_INDEX, VGA_SEQ_DATA, 0x66);
+	if (pSmi->Chipset == SMI_LYNX3DM) {
+	    switch (pScrn->bitsPerPixel) {
 	    case 8:
 		new->CCR66 = (new->CCR66 & 0xF3) | 0x00; /* 6 bits-RAM */
 		break;
@@ -2558,12 +2564,11 @@
 	    default:
 		LEAVE_PROC("SMI_ModeInit");
 		return(FALSE);
-        }
-    }
-    /* end CZ */
+	    }
+	}
 
-	outb(VGA_SEQ_INDEX, 0x30);
-	if (inb(VGA_SEQ_DATA) & 0x01)
+	outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x30);
+	if (inb(pSmi->PIOBase + VGA_SEQ_DATA) & 0x01)
 	{
 		new->SR21 = 0x00;
 	}
@@ -2755,7 +2760,7 @@
 	vgaRegPtr vgaSavePtr = &hwp->SavedReg;
 	SMIRegPtr SMISavePtr = &pSmi->SavedReg;
 	Bool ret;
-
+	
 	ENTER_PROC("SMI_CloseScreen");
 
 	if (pScrn->vtSema)
@@ -2777,10 +2782,10 @@
 	{
 		xfree(pSmi->DGAModes);
 	}
-	if (pSmi->pVbe != NULL)
+	if (pSmi->pInt10 != NULL)
 	{
-		vbeFree(pSmi->pVbe);
-		pSmi->pVbe = NULL;
+		xf86FreeInt10(pSmi->pInt10);
+		pSmi->pInt10 = NULL;
 	}
 #ifdef XvExtension
 	if (pSmi->ptrAdaptor != NULL)
@@ -2949,16 +2954,16 @@
 	vgaHWSetStdFuncs(hwp);
 
 	/* Enable linear mode */
-	outb(VGA_SEQ_INDEX, 0x18);
-	tmp = inb(VGA_SEQ_DATA);
+	outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x18);
+	tmp = inb(pSmi->PIOBase + VGA_SEQ_DATA);
 	pSmi->SR18Value = tmp;					/* PDR#521 */
-	outb(VGA_SEQ_DATA, tmp | 0x11);
+	outb(pSmi->PIOBase + VGA_SEQ_DATA, tmp | 0x11);
 
 	/* Enable 2D/3D Engine and Video Processor */
-	outb(VGA_SEQ_INDEX, 0x21);
-	tmp = inb(VGA_SEQ_DATA);
+	outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x21);
+	tmp = inb(pSmi->PIOBase + VGA_SEQ_DATA);
 	pSmi->SR21Value = tmp;					/* PDR#521 */
-	outb(VGA_SEQ_DATA, tmp & ~0x03);
+	outb(pSmi->PIOBase + VGA_SEQ_DATA, tmp & ~0x03);
 
 	LEAVE_PROC("SMI_EnableMmio");
 }
@@ -2974,12 +2979,12 @@
 	vgaHWSetStdFuncs(hwp);
 
 	/* Disable 2D/3D Engine and Video Processor */
-	outb(VGA_SEQ_INDEX, 0x21);
-	outb(VGA_SEQ_DATA, pSmi->SR21Value);	/* PDR#521 */
+	outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x21);
+	outb(pSmi->PIOBase + VGA_SEQ_DATA, pSmi->SR21Value);	/* PDR#521 */
 
 	/* Disable linear mode */
-	outb(VGA_SEQ_INDEX, 0x18);
-	outb(VGA_SEQ_DATA, pSmi->SR18Value);	/* PDR#521 */
+	outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x18);
+	outb(pSmi->PIOBase + VGA_SEQ_DATA, pSmi->SR18Value);	/* PDR#521 */
 
 	LEAVE_PROC("SMI_DisableMmio");
 }
@@ -3094,31 +3099,31 @@
 	}
 
 	#if 1 /* PDR#735 */
-	if (pSmi->pVbe->pInt10 != NULL)
+	if (pSmi->pInt10 != NULL)
 	{
-		pSmi->pVbe->pInt10->ax = 0x4F10;
+		pSmi->pInt10->ax = 0x4F10;
 		switch (PowerManagementMode)
 		{
 			case DPMSModeOn:
-				pSmi->pVbe->pInt10->bx = 0x0001;
+				pSmi->pInt10->bx = 0x0001;
 				break;
 
 			case DPMSModeStandby:
-				pSmi->pVbe->pInt10->bx = 0x0101;
+				pSmi->pInt10->bx = 0x0101;
 				break;
 
 			case DPMSModeSuspend:
-				pSmi->pVbe->pInt10->bx = 0x0201;
+				pSmi->pInt10->bx = 0x0201;
 				break;
 
 			case DPMSModeOff:
-				pSmi->pVbe->pInt10->bx = 0x0401;
+				pSmi->pInt10->bx = 0x0401;
 				break;
 		}
-		pSmi->pVbe->pInt10->cx = 0x0000;
-		pSmi->pVbe->pInt10->num = 0x10;
-		xf86ExecX86int10(pSmi->pVbe->pInt10);
-		if (pSmi->pVbe->pInt10->ax == 0x004F)
+		pSmi->pInt10->cx = 0x0000;
+		pSmi->pInt10->num = 0x10;
+		xf86ExecX86int10(pSmi->pInt10);
+		if (pSmi->pInt10->ax == 0x004F)
 		{
 			pSmi->CurrentDPMS = PowerManagementMode;
 			#if 1 /* PDR#835 */
Index: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.c
===================================================================
RCS file: /home/branden/packages/xfree86/cvsup/xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.c,v
retrieving revision 1.6
retrieving revision 1.8
diff -u -u -r1.6 -r1.8
--- xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.c	20 Dec 2001 21:35:39 -0000	1.6
+++ xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.c	16 Sep 2002 18:06:00 -0000	1.8
@@ -1,5 +1,4 @@
 /* Header:   //Mercury/Projects/archives/XFree86/4.0/smi_video.c.-arc   1.14   30 Nov 2000 16:51:40   Frido  $ */
-
 /*
 Copyright (C) 1994-1999 The XFree86 Project, Inc.  All Rights Reserved.
 Copyright (C) 2000 Silicon Motion, Inc.  All Rights Reserved.
@@ -33,6 +32,7 @@
 - SAA7111 support
 - supports attributes: XV_ENCODING, XV_BRIGHTNESS, XV_CONTRAST,
   XV_SATURATION, XV_HUE, XV_COLORKEY, XV_INTERLACED
+  XV_CAPTURE_BRIGHTNESS can be used to set brightness in the capture device
 - bug fixes
 - tries not to use acceleration functions (if USE_XAA = 0)
 - interlaced video for double vertical resolution
@@ -41,7 +41,7 @@
 Date:   2.11.2001
 */
 
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.c,v 1.6 2001/12/20 21:35:39 eich Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.c,v 1.8 2002/09/16 18:06:00 eich Exp $ */
 
 #include "smi.h"
 #include "smi_video.h"
@@ -134,7 +134,9 @@
 		BoxPtr dstBox, short vid_w, short vid_h, short drw_w, short drw_h);
 static void SMI_BlockHandler(int i, pointer blockData, pointer pTimeout,
 		pointer pReadMask);
+#if 0
 static void SMI_WaitForSync(ScrnInfoPtr pScrn);
+#endif
 /*static int SMI_SendI2C(ScrnInfoPtr pScrn, CARD8 device, char *devName,
         SMI_I2CDataPtr i2cData);*/
 
@@ -169,7 +171,7 @@
 
 static Atom xvColorKey;
 static Atom xvEncoding;
-static Atom xvBrightness, xvContrast, xvSaturation, xvHue;
+static Atom xvBrightness,xvCapBrightness, xvContrast, xvSaturation, xvHue;
 static Atom xvInterlaced;
 
 
@@ -255,6 +257,7 @@
 
 #define XV_ENCODING_NAME        "XV_ENCODING"
 #define XV_BRIGHTNESS_NAME      "XV_BRIGHTNESS"
+#define XV_CAPTURE_BRIGHTNESS_NAME      "XV_CAPTURE_BRIGHTNESS"
 #define XV_CONTRAST_NAME        "XV_CONTRAST"
 #define XV_SATURATION_NAME      "XV_SATURATION"
 #define XV_HUE_NAME             "XV_HUE"
@@ -263,9 +266,10 @@
 
 
 /* fixed order! */
-static XF86AttributeRec SMI_VideoAttributes[N_ATTRS] = {
+static XF86AttributeRec SMI_VideoAttributesSAA711x[N_ATTRS] = {
     {XvSettable | XvGettable,        0, N_ENCODINGS-1, XV_ENCODING_NAME},
     {XvSettable | XvGettable,        0,           255, XV_BRIGHTNESS_NAME},
+    {XvSettable | XvGettable,        0,           255, XV_CAPTURE_BRIGHTNESS_NAME},
     {XvSettable | XvGettable,        0,           127, XV_CONTRAST_NAME},
     {XvSettable | XvGettable,        0,           127, XV_SATURATION_NAME},
     {XvSettable | XvGettable,     -128,           127, XV_HUE_NAME},
@@ -273,6 +277,11 @@
     {XvSettable | XvGettable,        0,             1, XV_INTERLACED_NAME},
 };
 
+static XF86AttributeRec SMI_VideoAttributes[N_ATTRS] = {
+    {XvSettable | XvGettable,        0,           255, XV_BRIGHTNESS_NAME},
+    {XvSettable | XvGettable, 0x000000,      0xFFFFFF, XV_COLORKEY_NAME},
+};
+
 
 /**************************************************************************/
 static XF86ImageRec SMI_VideoImages[] =
@@ -393,7 +402,7 @@
 };
 
 
-
+#if 0
 static I2CByte SAA7110InitData[] =
 {
 	/* Configuration */
@@ -418,7 +427,7 @@
     0x22, 0x40, 0x2C, 0x03,
 
 };
-
+#endif
 
 static I2CByte SAA7111InitData[] =
 {
@@ -616,7 +625,7 @@
 
     if (numAdaptors != 0)
     {
-      DEBUG((VERBLEV, "ScreenInit\n"));
+      DEBUG((VERBLEV, "ScreenInit %i\n",numAdaptors));
         xf86XVScreenInit(pScreen, ptrAdaptors, numAdaptors);
     }
 
@@ -635,6 +644,7 @@
  *  Video codec controls
  */
 
+#if 0
 /**
  * scales value value of attribute i to range min, max
  */
@@ -644,13 +654,16 @@
     return min + (value - SMI_VideoAttributes[i].min_value) * (max - min) /
 	(SMI_VideoAttributes[i].max_value - SMI_VideoAttributes[i].min_value);
 }
-
+#endif
 /**
  * sets video decoder attributes channel, encoding, brightness, contrast, saturation, hue
  */
 static int
 SetAttr(ScrnInfoPtr pScrn, int i, int value)
 {
+    SMIPtr pSmi = SMIPTR(pScrn);
+    SMI_PortPtr pPort = (SMI_PortPtr) pSmi->ptrAdaptor->pPortPrivates[0].ptr;
+
     if (i < XV_ENCODING || i > XV_HUE)
 	return BadMatch;
     
@@ -658,15 +671,16 @@
     value = CLAMP(value, SMI_VideoAttributes[i].min_value,
 		  SMI_VideoAttributes[i].max_value);
 
-#if 0
-    if (pPPriv->I2CDev == SAA7110) {
+    if (i == XV_BRIGHTNESS) {
+	int my_value = (value <= 128? value + 128 : value - 128);
+	WRITE_VPR(pSmi, 0x5C, 0xEDEDED | (my_value << 24));
+    } else if (pPort->I2CDev.SlaveAddr == SAA7110) {
 	return SetAttrSAA7110(pScrn, i, value);
     }
-    else if (pPPriv->I2CDev == SAA7111) {
-#endif
+    else if (pPort->I2CDev.SlaveAddr == SAA7111) {
 	return SetAttrSAA7111(pScrn, i, value);
-#if 0
     }
+#if 0
     else {
 	return XvBadAlloc;
     }
@@ -729,12 +743,12 @@
 	    }
 	}
     }
-    else if (i >= XV_BRIGHTNESS && i <= XV_HUE) {
+    else if (i >= XV_CAPTURE_BRIGHTNESS && i <= XV_HUE) {
 	int slave_adr = 0;
 
 	switch (i) {
 
-	case XV_BRIGHTNESS:
+	case XV_CAPTURE_BRIGHTNESS:
 	    DEBUG((VERBLEV, "SetAttribute XV_BRIGHTNESS: %d\n", value));
 	    slave_adr = 0x0a;
 	    break;
@@ -764,8 +778,6 @@
 	return BadMatch;
     }
 
-    pPort->Attribute[i] = value;
-    
     /* debug: show registers */
     {
 	I2CByte i2c_bytes[32];
@@ -886,38 +898,40 @@
     smiPortPtr->I2CDev.SlaveAddr = SAA7111;
     smiPortPtr->I2CDev.pI2CBus = pSmi->I2C;
 
-    if (!xf86I2CDevInit(&(smiPortPtr->I2CDev)))
-    {
-        LEAVE_PROC("SMI_SetupVideo");
-        return(NULL);
-    }
-    DEBUG((VERBLEV, "SAA7111 intialized\n"));
-
-    if (!xf86I2CWriteVec(&(smiPortPtr->I2CDev), SAA7111InitData, ENTRIES(SAA7111InitData) / 2))
+    
+    if (xf86I2CDevInit(&(smiPortPtr->I2CDev)))
     {
-        LEAVE_PROC("SMI_SetupVideo");
-        return(NULL);
-    }
-
-	REGION_INIT(pScreen, &smiPortPtr->clip, NullBox, 0);
-
-	pSmi->ptrAdaptor = ptrAdaptor;
-	pSmi->BlockHandler = pScreen->BlockHandler;
-	pScreen->BlockHandler = SMI_BlockHandler;
-
-    xvEncoding   = MAKE_ATOM(XV_ENCODING_NAME);
-    xvHue        = MAKE_ATOM(XV_HUE_NAME);
-    xvSaturation = MAKE_ATOM(XV_SATURATION_NAME);
-    xvBrightness = MAKE_ATOM(XV_BRIGHTNESS_NAME);
-    xvContrast   = MAKE_ATOM(XV_CONTRAST_NAME);
-
+	
+	if (xf86I2CWriteVec(&(smiPortPtr->I2CDev), 	SAA7111InitData, 
+			    ENTRIES(SAA7111InitData) / 2)) {
+	    xvEncoding   = MAKE_ATOM(XV_ENCODING_NAME);
+	    xvHue        = MAKE_ATOM(XV_HUE_NAME);
+	    xvSaturation = MAKE_ATOM(XV_SATURATION_NAME);
+	    xvContrast   = MAKE_ATOM(XV_CONTRAST_NAME);
+	    
+	    xvInterlaced = MAKE_ATOM(XV_INTERLACED_NAME);
+	    DEBUG((VERBLEV, "SAA7111 intialized\n"));
+    
+	} else { 
+	    xf86DestroyI2CDevRec(&(smiPortPtr->I2CDev),FALSE);
+	    smiPortPtr->I2CDev.SlaveAddr = 0;
+	}
+    } else
+	smiPortPtr->I2CDev.SlaveAddr = 0;
+	
+    REGION_INIT(pScreen, &smiPortPtr->clip, NullBox, 0);
+    
+    pSmi->ptrAdaptor = ptrAdaptor;
+    pSmi->BlockHandler = pScreen->BlockHandler;
+    pScreen->BlockHandler = SMI_BlockHandler;
+    
     xvColorKey   = MAKE_ATOM(XV_COLORKEY_NAME);
-    xvInterlaced = MAKE_ATOM(XV_INTERLACED_NAME);
-
-	SMI_ResetVideo(pScrn);
-
-	LEAVE_PROC("SMI_SetupVideo");
-	return(ptrAdaptor);
+    xvBrightness = MAKE_ATOM(XV_BRIGHTNESS_NAME);
+    xvCapBrightness = MAKE_ATOM(XV_CAPTURE_BRIGHTNESS_NAME);
+    
+    SMI_ResetVideo(pScrn);
+    LEAVE_PROC("SMI_SetupVideo");
+    return(ptrAdaptor);
 }
 
 
@@ -934,6 +948,7 @@
 
     SetAttr(pScrn, XV_ENCODING, 0);     /* Encoding = pal-composite-0 */
     SetAttr(pScrn, XV_BRIGHTNESS, 128); /* Brightness = 128 (CCIR level) */
+    SetAttr(pScrn, XV_CAPTURE_BRIGHTNESS, 128); /* Brightness = 128 (CCIR level) */
     SetAttr(pScrn, XV_CONTRAST, 71);    /* Contrast = 71 (CCIR level) */
     SetAttr(pScrn, XV_SATURATION, 64);  /* Color saturation = 64 (CCIR level) */
     SetAttr(pScrn, XV_HUE, 0);          /* Hue = 0 */
@@ -1253,9 +1268,9 @@
 
 	OUT_SEQ(pSmi, 0x21, IN_SEQ(pSmi, 0x21) & ~0x04);
 	WRITE_VPR(pSmi, 0x54, READ_VPR(pSmi, 0x54) | 0x00200000);
-
+#if 0
 	SMI_WaitForSync(pScrn);
-
+#endif
     /* Video Window I Left and Top Boundaries */
 	WRITE_VPR(pSmi, 0x14, dstBox.x1 + (dstBox.y1 << 16));
     /* Video Window I Right and Bottom Boundaries */
@@ -1415,6 +1430,9 @@
     else if (attribute == xvBrightness) {
         res = SetAttr(pScrn, XV_BRIGHTNESS, value);
     }
+    else if (attribute == xvCapBrightness) {
+        res = SetAttr(pScrn, XV_CAPTURE_BRIGHTNESS, value);
+    }
     else if (attribute == xvContrast) {
         res = SetAttr(pScrn, XV_CONTRAST, value);
     }
@@ -1444,11 +1462,12 @@
     SMI_PortPtr pPort = (SMI_PortPtr) data;
 
 	ENTER_PROC("SMI_GetPortAttribute");
-
     if (attribute == xvEncoding)
         *value = pPort->Attribute[XV_ENCODING];
-	else if (attribute == xvBrightness)
+    else if (attribute == xvBrightness)
         *value = pPort->Attribute[XV_BRIGHTNESS];
+    else if (attribute == xvCapBrightness)
+        *value = pPort->Attribute[XV_CAPTURE_BRIGHTNESS];
     else if (attribute == xvContrast)
         *value = pPort->Attribute[XV_CONTRAST];
     else if (attribute == xvSaturation)
@@ -1756,7 +1775,7 @@
 **						S U P P O R T   F U N C T I O N S					  **
 **																			  **
 \******************************************************************************/
-
+#if 0
 static void
 SMI_WaitForSync(
 	ScrnInfoPtr	pScrn
@@ -1770,6 +1789,7 @@
 
 	VerticalRetraceWait();
 }
+#endif
 
 static Bool
 RegionsEqual(
@@ -2007,9 +2027,9 @@
 	{
 		vstretch = 0;
 	}
-
+#if 0
 	SMI_WaitForSync(pScrn);
-
+#endif
 	WRITE_VPR(pSmi, 0x00, vpr00 | (1 << 3) | (1 << 20));
 	WRITE_VPR(pSmi, 0x14, (dstBox->x1) | (dstBox->y1 << 16));
 	WRITE_VPR(pSmi, 0x18, (dstBox->x2) | (dstBox->y2 << 16));
@@ -2083,7 +2103,6 @@
 	}
 
 	dev = xf86CreateI2CDevRec();
-	ErrorF("zz %x\n",dev);
 	if (dev == NULL)
 	{
 		LEAVE_PROC("SMI_SendI2C");
@@ -2130,6 +2149,7 @@
 	XF86OffscreenImagePtr offscreenImages;
 	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
 	SMIPtr pSmi = SMIPTR(pScrn);
+	SMI_PortPtr pPort = (SMI_PortPtr) pSmi->ptrAdaptor->pPortPrivates[0].ptr;
 
 	ENTER_PROC("SMI_InitOffscreenImages");
 
@@ -2151,9 +2171,14 @@
 	offscreenImages->setAttribute = SMI_SetSurfaceAttribute;
 	offscreenImages->max_width = pSmi->lcdWidth;
 	offscreenImages->max_height = pSmi->lcdHeight;
-	offscreenImages->num_attributes = nElems(SMI_VideoAttributes);
-	offscreenImages->attributes = SMI_VideoAttributes;
-
+	if (!pPort->I2CDev.SlaveAddr) {
+	    offscreenImages->num_attributes = nElems(SMI_VideoAttributes);
+	    offscreenImages->attributes = SMI_VideoAttributes; 
+	} else {
+	    offscreenImages->num_attributes = 
+		nElems(SMI_VideoAttributesSAA711x);
+	    offscreenImages->attributes = SMI_VideoAttributesSAA711x; 
+	}
 	xf86XVRegisterOffscreenImages(pScreen, offscreenImages, 1);
 
 	LEAVE_PROC("SMI_InitOffscreenImages");
Index: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.h
===================================================================
RCS file: /home/branden/packages/xfree86/cvsup/xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -u -r1.3 -r1.4
--- xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.h	20 Dec 2001 21:35:39 -0000	1.3
+++ xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.h	16 Sep 2002 18:06:01 -0000	1.4
@@ -26,7 +26,7 @@
 sale, use or other dealings in this Software without prior written
 authorization from the XFree86 Project and silicon Motion.
 */
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.h,v 1.3 2001/12/20 21:35:39 eich Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.h,v 1.4 2002/09/16 18:06:01 eich Exp $ */
 
 #ifndef _SMI_VIDEO_H
 #define _SMI_VIDEO_H
@@ -56,15 +56,16 @@
  * Attributes
  */
 
-#define N_ATTRS                 7
+#define N_ATTRS                 8
 
 #define XV_ENCODING             0
 #define XV_BRIGHTNESS           1
-#define XV_CONTRAST             2
-#define XV_SATURATION           3
-#define XV_HUE                  4
-#define XV_COLORKEY             5
-#define XV_INTERLACED           6
+#define XV_CAPTURE_BRIGHTNESS	2
+#define XV_CONTRAST             3
+#define XV_SATURATION           4
+#define XV_HUE                  5
+#define XV_COLORKEY             6
+#define XV_INTERLACED           7
 
 typedef struct
 {

Attachment: pgpnuOILL2HZ1.pgp
Description: PGP signature


Reply to: