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

X Strike Force XFree86 SVN commit: r1725 - in trunk/debian: . patches



Author: branden
Date: 2004-08-10 20:28:34 -0500 (Tue, 10 Aug 2004)
New Revision: 1725

Added:
   trunk/debian/patches/000_stolen_from_HEAD_trident_driver.diff
Modified:
   trunk/debian/CHANGESETS
   trunk/debian/changelog
   trunk/debian/patches/000_stolen_from_HEAD.diff
   trunk/debian/patches/030_Xserver_and_driver_region_primitive_fixups.diff
   trunk/debian/patches/911_debian_XF86Config_to_XF86Config-4.diff
Log:
Grab from XFree86 CVS (2003-07-07) more updates to the trident driver,
placing them in their own patch file.  Fixes several bugs and adds support
for TV chipsets VT1621 and CH7005.  Drop trident driver patches in
#000_stolen_from_HEAD in favor of new patch file.  Extend reversion of
REGION_EQUAL macro implementation to trident driver in patch #030.  Resync
patch #911.


Modified: trunk/debian/CHANGESETS
===================================================================
--- trunk/debian/CHANGESETS	2004-08-10 23:53:36 UTC (rev 1724)
+++ trunk/debian/CHANGESETS	2004-08-11 01:28:34 UTC (rev 1725)
@@ -281,4 +281,12 @@
 Resync patch #911.
     1723, 1724
 
+Grab from XFree86 CVS (2003-07-07) more updates to the trident driver,
+placing them in their own patch file.  Fixes several bugs and adds support
+for TV chipsets VT1621 and CH7005.  Drop trident driver patches in
+#000_stolen_from_HEAD in favor of new patch file.  Extend reversion of
+REGION_EQUAL macro implementation to trident driver in patch #030.  Resync
+patch #911.
+    1725
+
 vim:set ai et sts=4 sw=4 tw=80:

Modified: trunk/debian/changelog
===================================================================
--- trunk/debian/changelog	2004-08-10 23:53:36 UTC (rev 1724)
+++ trunk/debian/changelog	2004-08-11 01:28:34 UTC (rev 1725)
@@ -202,6 +202,13 @@
     reversion of REGION_EQUAL macro implementation to nv driver in patch #030.
     Resync patch #911.
 
+  * Grab from XFree86 CVS (2003-07-07) more updates to the trident driver,
+    placing them in their own patch file.  Fixes several bugs and adds support
+    for TV chipsets VT1621 and CH7005.  Drop trident driver patches in
+    #000_stolen_from_HEAD in favor of new patch file.  Extend reversion of
+    REGION_EQUAL macro implementation to trident driver in patch #030.  Resync
+    patch #911.
+
   Changes by Fabio M. Di Nitto and Branden Robinson:
 
   * Support building only the parts of the source tree needed by
@@ -242,7 +249,7 @@
   * Add checks to NSERVERS and NDRIVERS to avoid an "unknown" card to be
     counted as a supported one if the user choose to autodetected.
 
- -- Branden Robinson <branden@debian.org>  Tue, 10 Aug 2004 17:56:17 -0500
+ -- Branden Robinson <branden@debian.org>  Tue, 10 Aug 2004 19:07:00 -0500
 
 xfree86 (4.3.0.dfsg.1-6) unstable; urgency=low
 

Modified: trunk/debian/patches/000_stolen_from_HEAD.diff
===================================================================
--- trunk/debian/patches/000_stolen_from_HEAD.diff	2004-08-10 23:53:36 UTC (rev 1724)
+++ trunk/debian/patches/000_stolen_from_HEAD.diff	2004-08-11 01:28:34 UTC (rev 1725)
@@ -57,14 +57,6 @@
 xc/programs/Xserver/hw/xfree86/drivers/rendition/rendition.c @ 1.51
  981. Disable cuase of SEGV's in rendition driver (Marc La France).
 
-xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c @ 1.71
- 978. Fix bug in trident driver that caused old Cyber 9382/9385 chipsets
-      to display half a jittered screen (Alan Hourihane).
-
-xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c @ 1.36
- 231. Fix regression of Xvideo not working with some videos on the
-      CyberBladeXP/Ai1 chips (Bugzilla #251, Stephane Voltz).
-
 xc/programs/Xserver/hw/xfree86/ramdac/xf86HWCurs.c @ 1.13
   Don't call the driver's SetCursorColors function for ARGB cursors.
 
@@ -997,40 +989,6 @@
        }
      }
      else {
-diff -urN xc.orig/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c
---- xc.orig/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c	2003-01-06 05:09:00.000000000 +1100
-+++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c	2003-04-09 01:58:14.000000000 +1000
-@@ -21,7 +21,7 @@
-  *
-  * Author:  Alan Hourihane, alanh@fairlite.demon.co.uk
-  */
--/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c,v 1.70 2003/01/05 18:09:00 alanh Exp $ */
-+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c,v 1.71 2003/03/17 09:32:51 alanh Exp $ */
- 
- #include "xf86.h"
- #include "xf86_OSproc.h"
-@@ -652,7 +652,8 @@
- 	pReg->tridentRegs3x4[Performance] |= 0x10;
- 
-     OUTB(vgaIOBase+ 4, DRAMControl);
--    pReg->tridentRegs3x4[DRAMControl] = INB(vgaIOBase + 5) | 0x10;
-+    if (pTrident->Chipset >= CYBER9388)
-+    	pReg->tridentRegs3x4[DRAMControl] = INB(vgaIOBase + 5) | 0x10;
- 
-     if (pTrident->IsCyber && !pTrident->MMIOonly)
- 	pReg->tridentRegs3x4[DRAMControl] |= 0x20;
-diff -u -p -r1.35 -r1.36
---- xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c	2003/06/01 23:02:09	1.35
-+++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c	2003/06/19 11:01:54	1.36
-@@ -852,7 +852,7 @@
-     	} else {
-     	    OUTW(0x3C4, 0x0097); /* 1x line buffers */
-     	}
--    	OUTW(vgaIOBase + 4, 0x8097); 
-+    	OUTW(vgaIOBase + 4, 0x0097); 
-     	OUTW(vgaIOBase + 4, 0x00BA);
-     	OUTW(vgaIOBase + 4, 0x00BB);
-     	OUTW(vgaIOBase + 4, 0xFFBC);
 diff -urN xc.orig/programs/Xserver/hw/xfree86/ramdac/xf86HWCurs.c xc/programs/Xserver/hw/xfree86/ramdac/xf86HWCurs.c
 --- xc.orig/programs/Xserver/hw/xfree86/ramdac/xf86HWCurs.c	2003-02-14 07:28:41.000000000 +1100
 +++ xc/programs/Xserver/hw/xfree86/ramdac/xf86HWCurs.c	2003-04-09 01:58:14.000000000 +1000

Added: trunk/debian/patches/000_stolen_from_HEAD_trident_driver.diff
===================================================================
--- trunk/debian/patches/000_stolen_from_HEAD_trident_driver.diff	2004-08-10 23:53:36 UTC (rev 1724)
+++ trunk/debian/patches/000_stolen_from_HEAD_trident_driver.diff	2004-08-11 01:28:34 UTC (rev 1725)
@@ -0,0 +1,1440 @@
+$Id$
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c @ 1.71
+   978. Fix bug in trident driver that caused old Cyber 9382/9385 chipsets
+        to display half a jittered screen (Alan Hourihane).
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile @ 1.32
+xc/programs/Xserver/hw/xfree86/drivers/trident/blade_accel.c @ 1.19
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident.h @ 1.57
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man @ 1.13
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c @ 1.72
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_driver.c @ 1.177
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_tv.c @ 1.1
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c @ 1.32
+   105. Fix lockup when using Xv in the trident driver (Alan Hourihane).
+   104. Add support for TV chipsets VT1621 and CH7005 to the trident driver
+        (VIA, Alan Hourihane).
+
+  1.33          +3 -1      xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile
+[...]
+  Added Missing files to the SDK so it actually work.
+[Sven Luther]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_tv.c @ 1.2
+  build fixes
+[David Dawes]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident.h @ 1.58
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_driver.c @ 1.178
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c @ 1.33
+   127. Centralise a region comparison primitive into 'mi' and use it instead of
+        local definitions throughout the server (Marc La France).
+[This was reverted; see patch #030.]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man @ 1.14
+[...]
+  Fix manual pages typos (Bugzilla #316, Jens Schweikhardt).
+[Matthieu Herrb]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c @ 1.34
+  put back waitforvblank in stopping video
+[Alan Hourihane]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c @ 1.35
+  build fix
+[Alan Hourihane]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c @ 1.36
+   231. Fix regression of Xvideo not working with some videos on the
+        CyberBladeXP/Ai1 chips (Bugzilla #251, Stephane Voltz).
+[Alan Hourihane]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c @ 1.37
+   266. Fix a lockup with the trident driver when stopping/starting Xv
+        applications (Alan Hourihane).
+[Alan Hourihane]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c @ 1.38
+  Ugh. committed too much debug in that last fix.
+[Alan Hourihane]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man @ 1.15
+  fix typo in man page
+[Alan Hourihane]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_driver.c @ 1.179
+  add XAAScreenIndex to xaaSymbols list
+[Alan Hourihane]
+
+xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c @ 1.39
+  slight adjustment to xvideo hsync values for cyberblade at 24bit depth
+[Alan Hourihane]
+
+Index: xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile,v
+retrieving revision 1.31.2.1
+retrieving revision 1.33
+diff -u -r1.31.2.1 -r1.33
+--- xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile	24 May 2003 22:22:14 -0000	1.31.2.1
++++ xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile	21 Apr 2003 12:32:11 -0000	1.33
+@@ -1,4 +1,4 @@
+-XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile,v 1.31.2.1 2003/05/24 22:22:14 sven Exp $
++XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/Imakefile,v 1.33 2003/04/21 12:32:11 sven Exp $
+ XCOMM
+ XCOMM This is an Imakefile for the TRIDENT driver.  
+ XCOMM
+@@ -9,11 +9,11 @@
+ SRCS = trident_driver.c trident_dac.c tridenthelper.c \
+        trident_accel.c trident_i2c.c trident_bank.c \
+        image_accel.c blade_accel.c tvga_dac.c trident_dga.c \
+-       trident_shadow.c trident_video.c xp_accel.c
++       trident_shadow.c trident_video.c xp_accel.c trident_tv.c
+ OBJS = trident_driver.o trident_dac.o tridenthelper.o \
+        trident_accel.o trident_i2c.o trident_bank.o \
+        image_accel.o blade_accel.o tvga_dac.o trident_dga.o \
+-       trident_shadow.o trident_video.o xp_accel.o
++       trident_shadow.o trident_video.o xp_accel.o trident_tv.o
+ 
+ #if defined(XF86DriverSDK)
+ INCLUDES = -I. -I../../include
+@@ -62,6 +62,7 @@
+ InstallDriverSDKNonExecFile(tridentramdac.c,$(DRIVERSDKDIR)/drivers/trident)
+ InstallDriverSDKNonExecFile(trident_video.c,$(DRIVERSDKDIR)/drivers/trident)
+ InstallDriverSDKNonExecFile(tvga_dac.c,$(DRIVERSDKDIR)/drivers/trident)
++InstallDriverSDKNonExecFile(trident_tv.c,$(DRIVERSDKDIR)/drivers/trident)
+ InstallDriverSDKNonExecFile(xp_accel.c,$(DRIVERSDKDIR)/drivers/trident)
+ 
+ InstallDriverSDKObjectModule(trident,$(DRIVERSDKMODULEDIR),drivers)
+Index: xc/programs/Xserver/hw/xfree86/drivers/trident/blade_accel.c
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/trident/blade_accel.c,v
+retrieving revision 1.18
+retrieving revision 1.19
+diff -u -r1.18 -r1.19
+--- xc/programs/Xserver/hw/xfree86/drivers/trident/blade_accel.c	8 Oct 2002 22:14:11 -0000	1.18
++++ xc/programs/Xserver/hw/xfree86/drivers/trident/blade_accel.c	15 Apr 2003 22:13:43 -0000	1.19
+@@ -23,7 +23,7 @@
+  * 
+  * Trident Blade3D accelerated options.
+  */
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/blade_accel.c,v 1.18 2002/10/08 22:14:11 tsi Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/blade_accel.c,v 1.19 2003/04/15 22:13:43 alanh Exp $ */
+ 
+ #include "xf86.h"
+ #include "xf86_OSproc.h"
+@@ -295,13 +295,13 @@
+ 	BLADE_OUT(0x2168, transparency_color & 0xffffff);
+ 	pTrident->BltScanDirection |= 1<<6;
+     }
+-#endif
+  
+     REPLICATE(planemask);
+-    if (planemask != -1) {
++    if (planemask != (unsigned int)-1) {
+ 	BLADE_OUT(0x2184, ~planemask);
+ 	pTrident->BltScanDirection |= 1<<5;
+     }
++#endif
+     BLADE_OUT(0x2148, XAACopyROP[rop]);
+ }
+ 
+@@ -483,11 +483,13 @@
+     BLADE_OUT(0x2160, color);
+     BLADE_OUT(0x2148, XAACopyROP[rop]);
+     pTrident->BltScanDirection = 0;
++#if 0
+     REPLICATE(planemask);
+     if (planemask != -1) {
+ 	BLADE_OUT(0x2184, ~planemask);
+ 	pTrident->BltScanDirection |= 1<<5;
+     }
++#endif
+ }
+ 
+ static void
+@@ -559,11 +561,13 @@
+     	BLADE_OUT(0x2160, fg);
+     	BLADE_OUT(0x2164, bg);
+     }
++#if 0
+     REPLICATE(planemask);
+     if (planemask != -1) {
+ 	BLADE_OUT(0x2184, ~planemask);
+ 	pTrident->BltScanDirection |= 1<<5;
+     }
++#endif
+ }
+ 
+ static void
+@@ -610,11 +614,13 @@
+     BLADE_OUT(0x2178, bg);
+     }
+     pTrident->BltScanDirection = 0;
++#if 0
+     REPLICATE(planemask);
+     if (planemask != -1) {
+ 	BLADE_OUT(0x2184, ~planemask);
+ 	pTrident->BltScanDirection |= 1<<5;
+     }
++#endif
+ }
+ 
+ static void 
+@@ -683,11 +689,13 @@
+ 
+     BLADE_OUT(0x2148, XAACopyROP[rop]);
+     pTrident->BltScanDirection = 0;
++#if 0
+     REPLICATE(planemask);
+     if (planemask != -1) {
+ 	BLADE_OUT(0x2184, ~planemask);
+ 	pTrident->BltScanDirection |= 1<<5;
+     }
++#endif
+ }
+ 
+ static void BladeSubsequentImageWriteRect(
+Index: xc/programs/Xserver/hw/xfree86/drivers/trident/trident.h
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/trident/trident.h,v
+retrieving revision 1.56
+retrieving revision 1.58
+diff -u -r1.56 -r1.58
+--- xc/programs/Xserver/hw/xfree86/drivers/trident/trident.h	16 Sep 2002 18:06:02 -0000	1.56
++++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident.h	23 Apr 2003 21:51:49 -0000	1.58
+@@ -21,7 +21,7 @@
+  *
+  * Authors:  Alan Hourihane, <alanh@fairlite.demon.co.uk>
+  */
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident.h,v 1.56 2002/09/16 18:06:02 eich Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident.h,v 1.58 2003/04/23 21:51:49 tsi Exp $ */
+ /*#define VBE_INFO*/
+ 
+ #ifndef _TRIDENT_H_
+@@ -49,6 +49,7 @@
+ 	unsigned char DacRegs[0x300];
+ } TRIDENTRegRec, *TRIDENTRegPtr;
+ 
++#define VGA_REGNUM_ABOUT_TV 19
+ #define TRIDENTPTR(p)	((TRIDENTPtr)((p)->driverPrivate))
+ 
+ typedef struct {
+@@ -140,7 +141,6 @@
+     CARD8*		XAAScanlineColorExpandBuffers[2];
+     CARD8*		XAAImageScanlineBuffer[1];
+     void                (*InitializeAccelerator)(ScrnInfoPtr);
+-#ifdef XvExtension
+     void		(*VideoTimerCallback)(ScrnInfoPtr, Time);
+     XF86VideoAdaptorPtr adaptor;
+     int                 videoKey;
+@@ -150,7 +150,6 @@
+     int			vsync_bskew;
+     CARD32              videoFlags;
+     int			keyOffset;
+-#endif
+     int                 OverrideHsync;
+     int                 OverrideVsync;
+     int                 OverrideBskew;
+@@ -163,6 +162,11 @@
+     int			brightness;
+     double		gamma;
+     int			FPDelay;	/* just for debugging - will go away */
++    int                 TVChipset;    /* 0: None 1: VT1621 2: CH7005C*/
++    int                 TVSignalMode; /* 0: NTSC 1: PAL */
++    Bool                TVRegSet;     /* 0: User not customer TV Reg, 1: User customer TV Reg */
++    unsigned char       TVRegUserSet[2][128]; /*[0][128] for Reg Index, [1][128] for Reg Value */
++    unsigned char       DefaultTVDependVGASetting[VGA_REGNUM_ABOUT_TV+0x62]; /* VGA_REGNUM_ABOUT_TV: VGA Reg, 0x62: TV Reg */
+ } TRIDENTRec, *TRIDENTPtr;
+ 
+ typedef struct {
+@@ -250,6 +254,11 @@
+ void TRIDENTRefreshArea24(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
+ void TRIDENTRefreshArea32(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
+ 
++void VIA_TVInit(ScrnInfoPtr pScrn);
++void VIA_SaveTVDepentVGAReg(ScrnInfoPtr pScrn);
++void VIA_RestoreTVDependVGAReg(ScrnInfoPtr pScrn);
++void VIA_DumpReg(ScrnInfoPtr pScrn);
++
+ /*
+  * Trident Chipset Definitions
+  */
+Index: xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man,v
+retrieving revision 1.12
+retrieving revision 1.15
+diff -u -r1.12 -r1.15
+--- xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man	6 Jan 2003 10:15:26 -0000	1.12
++++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man	3 Jul 2003 07:52:46 -0000	1.15
+@@ -1,4 +1,4 @@
+-.\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man,v 1.12 2003/01/06 10:15:26 alanh Exp $ 
++.\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man,v 1.15 2003/07/03 07:52:46 alanh Exp $ 
+ .\" shorthand for double quote that works everywhere.
+ .ds q \N'34'
+ .TH TRIDENT __drivermansuffix__ __vendorversion__
+@@ -39,7 +39,7 @@
+ .TP 12
+ .B ISA/VLBus
+ 8900C, 8900D, 9000, 9200CXr, Cyber9320, 9400CXi, 9440AGi
+-These cards have been ported but need furthur testing and may not work.
++These cards have been ported but need further testing and may not work.
+ .SH CONFIGURATION DETAILS
+ Please refer to XF86Config(__filemansuffix__) for general configuration
+ details.  This section only covers configuration details specific to this
+@@ -74,6 +74,14 @@
+ This sets the default pixel value for the YUV video overlay key.
+ Default: undefined.
+ .TP
++.BI "Option \*qTVChipset\*q \*q" string \*q
++This sets the TV chipset. Options are CH7005 or VT1621.
++Default: off.
++.TP
++.BI "Option \*qTVSignal\*q \*q" integer \*q
++This sets the TV signalling. Options are 0 for NTSC or 1 for PAL.
++Default: undefined.
++.TP
+ .BI "Option \*qNoPciBurst\*q \*q" boolean \*q
+ Turn off PCI burst mode, PCI Bursting is on by default.
+ Default: off.
+Index: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c,v
+retrieving revision 1.70
+retrieving revision 1.72
+diff -u -r1.70 -r1.72
+--- xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c	5 Jan 2003 18:09:00 -0000	1.70
++++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c	15 Apr 2003 22:13:43 -0000	1.72
+@@ -21,7 +21,7 @@
+  *
+  * Author:  Alan Hourihane, alanh@fairlite.demon.co.uk
+  */
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c,v 1.70 2003/01/05 18:09:00 alanh Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_dac.c,v 1.72 2003/04/15 22:13:43 alanh Exp $ */
+ 
+ #include "xf86.h"
+ #include "xf86_OSproc.h"
+@@ -652,7 +652,8 @@
+ 	pReg->tridentRegs3x4[Performance] |= 0x10;
+ 
+     OUTB(vgaIOBase+ 4, DRAMControl);
+-    pReg->tridentRegs3x4[DRAMControl] = INB(vgaIOBase + 5) | 0x10;
++    if (pTrident->Chipset >= CYBER9388)
++    	pReg->tridentRegs3x4[DRAMControl] = INB(vgaIOBase + 5) | 0x10;
+ 
+     if (pTrident->IsCyber && !pTrident->MMIOonly)
+ 	pReg->tridentRegs3x4[DRAMControl] |= 0x20;
+@@ -1197,4 +1198,3 @@
+ 	DACDelay(hwp);
+     }
+ }
+-
+Index: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_driver.c
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/trident/trident_driver.c,v
+retrieving revision 1.176
+retrieving revision 1.179
+diff -u -r1.176 -r1.179
+--- xc/programs/Xserver/hw/xfree86/drivers/trident/trident_driver.c	11 Feb 2003 03:41:38 -0000	1.176
++++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident_driver.c	7 Jul 2003 17:03:23 -0000	1.179
+@@ -28,7 +28,7 @@
+  *	    Massimiliano Ghilardi, max@Linuz.sns.it, some fixes to the
+  *				   clockchip programming code.
+  */
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_driver.c,v 1.176 2003/02/11 03:41:38 dawes Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_driver.c,v 1.179 2003/07/07 17:03:23 alanh Exp $ */
+ 
+ #include "xf1bpp.h"
+ #include "xf4bpp.h"
+@@ -64,9 +64,7 @@
+ #define DPMS_SERVER
+ #include "extensions/dpms.h"
+ 
+-#ifdef XvExtension
+ #include "xf86xv.h"
+-#endif
+ 
+ static const OptionInfoRec * TRIDENTAvailableOptions(int chipid, int busid);
+ static void	TRIDENTIdentify(int flags);
+@@ -235,7 +233,9 @@
+     OPTION_FP_DELAY,
+     OPTION_1400_DISPLAY,
+     OPTION_DISPLAY,
+-    OPTION_GB
++    OPTION_GB,
++    OPTION_TV_CHIPSET,
++    OPTION_TV_SIGNALMODE
+ } TRIDENTOpts;
+ 
+ static const OptionInfoRec TRIDENTOptions[] = {
+@@ -260,6 +260,8 @@
+     { OPTION_1400_DISPLAY,	"Display1400",	OPTV_BOOLEAN,	{0}, FALSE },
+     { OPTION_DISPLAY,		"Display",	OPTV_ANYSTR,	{0}, FALSE },
+     { OPTION_GB,		"GammaBrightness",	OPTV_ANYSTR,	{0}, FALSE },
++    { OPTION_TV_CHIPSET,        "TVChipset",    OPTV_ANYSTR,    {0}, FALSE },
++    { OPTION_TV_SIGNALMODE,     "TVSignal",     OPTV_INTEGER,   {0}, FALSE },
+     { -1,			NULL,		OPTV_NONE,	{0}, FALSE }
+ };
+ 
+@@ -458,7 +460,7 @@
+     { 3,800,600,40000,0x7f,0x82,0x6b,0x1b,0x72,0xf8,0x58,0x8c,0x72,0x08},
+     { 2,1024,768,65000,0xa3,/*0x6*/0x98,0x8f,0xa0,0x24,0xf5,0x0f,0x24,0x0a,0x08},
+     { 0,1280,1024,108000,0xce,0x81,0xa6,0x9a,0x27,0x50,0x00,0x03,0x26,0xa8},
+-    { 0xff,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
++    { 0xff,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
+ };
+ #else
+ tridentLCD LCD[] = { 
+@@ -467,7 +469,7 @@
+     { 2,1024,768,65000,0xa3,0x00,0x84,0x94,0x24,0xf5,0x03,0x09,0x24,0x08},
+     { 0,1280,1024,108000,0xce,0x91,0xa6,0x14,0x28,0x5a,0x01,0x04,0x28,0xa8},
+     { 4,1400,1050,122000,0xe6,0xcd,0xba,0x1d,0x38,0x00,0x1c,0x28,0x28,0xf8},
+-    { 0xff,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
++    { 0xff,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
+ };
+ #endif
+ #endif
+@@ -476,7 +478,6 @@
+     "XAACopyROP",
+     "XAACreateInfoRec",
+     "XAADestroyInfoRec",
+-    "XAAFillSolidRects",
+     "XAAInit",
+     "XAAPatternROP",
+     "XAAScreenIndex",
+@@ -1446,12 +1447,31 @@
+ 	    } else {
+ 	        xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "\"%s\" is not a valid"
+ 			   "value for Option \"Rotate\"\n", s);
+-		xf86DrvMsg(pScrn->scrnIndex, X_INFO, 
++		xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ 			   "Valid options are \"CW\" or \"CCW\"\n");
+ 	    }
+ 	}
+     }
+ 
++    pTrident->TVChipset = 0;
++    if ((s = xf86GetOptValString(pTrident->Options, OPTION_TV_CHIPSET))) {
++	if(!xf86NameCmp(s, "VT1621")) {
++	    pTrident->TVChipset = 1;
++	    xf86DrvMsg(pScrn->scrnIndex,X_CONFIG,"Using VIA VT1621 TV chip\n");
++	} else if (!xf86NameCmp(s, "CH7005")) {
++	    pTrident->TVChipset = 2;
++	    xf86DrvMsg(pScrn->scrnIndex,X_CONFIG,"Using Chrontel CH7005 TV chip\n");
++	} else 
++	    xf86DrvMsg(pScrn->scrnIndex,X_ERROR,
++		       "%s is an unknown TV chipset option\n",s);
++    }
++    /* Default : NTSC */
++    pTrident->TVSignalMode=0;
++    if (xf86GetOptValInteger(pTrident->Options, OPTION_TV_SIGNALMODE,
++						&pTrident->TVSignalMode)) {
++	ErrorF("TV SignalMode set to %d\n",pTrident->TVSignalMode);
++    }
++
+     /* FIXME ACCELERATION */
+     if (!UseMMIO) pTrident->NoAccel = TRUE;
+ 
+@@ -2569,6 +2589,9 @@
+     	TridentSave(pScrn, tridentReg);
+     else
+     	TVGASave(pScrn, tridentReg);
++
++    if (pTrident->TVChipset != 0)
++       VIA_SaveTVDepentVGAReg(pScrn);
+ }
+ 
+ 
+@@ -2678,6 +2701,9 @@
+     if (xf86IsPc98())
+ 	PC98TRIDENTEnable(pScrn);
+ 
++    if (pTrident->TVChipset != 0)
++       VIA_TVInit(pScrn);
++	
+     return TRUE;
+ }
+ 
+@@ -2707,6 +2733,9 @@
+     vgaHWRestore(pScrn, vgaReg, VGA_SR_MODE | VGA_SR_CMAP |
+ 				(IsPrimaryCard ? VGA_SR_FONTS : 0));
+ 
++    if (pTrident->TVChipset != 0)
++       VIA_RestoreTVDependVGAReg(pScrn);
++
+     vgaHWProtect(pScrn, FALSE);
+ }
+ 
+@@ -3018,10 +3047,8 @@
+     pScrn->memPhysBase = pTrident->FbAddress;
+     pScrn->fbOffset = 0;
+ 
+-#ifdef XvExtension
+     if (pTrident->Chipset >= TGUI9660)
+ 	TRIDENTInitVideo(pScreen);
+-#endif
+ 
+     pTrident->CloseScreen = pScreen->CloseScreen;
+     pScreen->CloseScreen = TRIDENTCloseScreen;
+Index: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_tv.c
+===================================================================
+RCS file: programs/Xserver/hw/xfree86/drivers/trident/trident_tv.c
+diff -N programs/Xserver/hw/xfree86/drivers/trident/trident_tv.c
+--- xc//dev/null	1 Jan 1970 00:00:00 -0000
++++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident_tv.c	21 Apr 2003 20:42:30 -0000	1.2
+@@ -0,0 +1,705 @@
++/*
++ * VIA TV additions
++ */
++
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_tv.c,v 1.2 2003/04/21 20:42:30 dawes Exp $ */
++
++#include "xf86_ansic.h"
++#include "trident.h"
++#include "trident_regs.h"
++
++/***************************************************************************
++ *
++ * TV parameters for VT1621
++ *
++ ***************************************************************************/
++#define TV_MODE  8
++#define TVX_MODE_SIZE 0X72
++#define TVX_CRTC_NUM 0x10
++#define TVX_REG_NUM 0x62
++#define TVX_VT1621_PORT 0x40
++#define SMBUS_BASE 0x5000
++unsigned char TVX_VT1621_Table[TV_MODE][TVX_MODE_SIZE] = {
++{
++/* NTSC, 640x480, bpp=8,16 */
++0x02, 0x54, 0xE0, 0xFA, 0x11, 0x5D, 0x11, 0x57, 0x5A, 0x56,
++0xA0, 0x26, 0x0A, 0x55, 0x37, 0x86,
++
++0x6A, 0x0B, 0x22, 0x27, 0x43, 0x50, 0x13, 0x50,
++0xB0, 0x07, 0xEE, 0x15, 0x90, 0xE4, 0x00, 0xA8,
++0x00, 0x00, 0x0E, 0x48, 0x38, 0x38, 0x00, 0x1C,
++0x00, 0x40, 0x0C, 0x02, 0x01, 0x80, 0x00, 0x00,
++0x0F, 0x06, 0x99, 0x7C, 0x04, 0x5D, 0x36, 0x9B,
++0x54, 0x00, 0x00, 0xB4, 0x2F, 0x85, 0xFF, 0x00,
++0x00, 0x17, 0x15, 0x21, 0x15, 0x05, 0x05, 0x02,
++0x1B, 0x1B, 0x24, 0xF8, 0x07, 0x00, 0x00, 0x0F,
++0x0F, 0x60, 0x01, 0x0A, 0x00, 0x05, 0x04, 0xFF,
++0x03, 0x01, 0x90, 0x33, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x04, 0x47, 0x02, 0x02, 0xFD, 0x06, 0xf8,
++0x0B, 0xF3, 0x0F, 0x70, 0x05, 0xF9, 0x0B, 0xF1,
++0x11, 0x6E
++},
++{
++/* NTSC, 800x600, bpp=8,16 */
++0X02, 0x79, 0XE0, 0x73, 0x02, 0x80, 0x01, 0x7A, 0x7E, 0xEC,
++0xA0, 0x8A, 0x0E, 0xEB, 0x8B, 0x89,
++
++0x8B, 0x0B, 0x6A, 0x27, 0x43, 0x50, 0x12, 0x50,
++0xBC, 0x0A, 0XE8, 0x15, 0x88, 0xDC, 0x00, 0x98,
++0x00, 0x00, 0x0A, 0x48, 0x1C, 0x28, 0x03, 0x20,
++0x00, 0x40, 0x36, 0x02, 0x03, 0x80, 0x00, 0x00,
++0x0D, 0x04, 0x04, 0x7B, 0x00, 0x5D, 0xC1, 0x9B,
++0x6B, 0x00, 0x00, 0xA1, 0x3F, 0x9D, 0x2F, 0x10,
++0x00, 0x17, 0x15, 0x21, 0x15, 0x05, 0x05, 0x02,
++0x1B, 0x1B, 0x24, 0xF8, 0x07, 0x00, 0x00, 0x0F,
++0x0F, 0x60, 0x01, 0x0A, 0x00, 0x05, 0x04, 0xFF,
++0x03, 0x01, 0xD6, 0x80, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x0C, 0x46, 0x02, 0x02, 0xFD, 0x06, 0xF8,
++0x0B, 0xF3, 0x0F, 0x70, 0x05, 0xF9, 0x0B, 0xF1,
++0x11, 0x6E
++},
++{
++/* NTSC, 640x480, bpp=32 */
++0X02, 0x54, 0XE0, 0xFA, 0x11, 0x5D, 0x01, 0x57, 0x5A, 0x56,
++0xA0, 0x26, 0x0A, 0X55, 0x37, 0x46,
++
++0x6A, 0x0B, 0x23, 0x33, 0x43, 0x50, 0x13, 0x51,
++0xB0, 0x07, 0xAB, 0x15, 0x90, 0xA9, 0x00, 0x98,
++0x00, 0x00, 0x0E, 0x48, 0x38, 0x38, 0x03, 0x1C,
++0x00, 0x40, 0x0C, 0x02, 0x03, 0x80, 0x00, 0x00,
++0x0F, 0x04, 0x99, 0x7A, 0x04, 0x5E, 0xB6, 0x90,
++0x5B, 0x00, 0x00, 0x67, 0x2F, 0x88, 0xFA, 0x00,
++0x00, 0x17, 0x15, 0x21, 0x15, 0x05, 0x05, 0x02,
++0x1B, 0x1B, 0x24, 0xF8, 0x07, 0x00, 0x00, 0x0F,
++0x0F, 0x60, 0x01, 0x0A, 0x00, 0x05, 0x04, 0xFF,
++0x03, 0x01, 0xA0, 0x33, 0x1B, 0x00, 0X00, 0x00,
++0x00, 0x08, 0x47, 0x02, 0x02, 0xFD, 0x06, 0xf8,
++0x0B, 0xF3, 0x0F, 0x70, 0x05, 0xF9, 0x0B, 0xF1,
++0x11, 0x6E
++},
++{
++/* NTSC, 800x600, bpp=32 */
++0X02, 0x79, 0XE0, 0x73, 0x02, 0x80, 0x01, 0x7B, 0x7E, 0xEC,
++0xA0, 0x8A, 0x0E, 0xEB, 0x8B, 0x49,
++
++0x8B, 0x0B, 0x6B, 0x27, 0x43, 0x50, 0x12, 0x2D,
++0xBC, 0x0C, 0xED, 0x15, 0x88, 0xEE, 0x00, 0x99,
++0x00, 0x00, 0x0A, 0x48, 0x1C, 0x28, 0x03, 0x20,
++0x00, 0x40, 0x36, 0x02, 0x03, 0x80, 0x00, 0x00,
++0x0D, 0x04, 0x04, 0x7A, 0x00, 0x5D, 0xC1, 0x9B,
++0x6B, 0x00, 0x00, 0xA1, 0x3F, 0x9D, 0x2F, 0x10,
++0x00, 0x17, 0x15, 0x21, 0x15, 0x05, 0x05, 0x02,
++0x1B, 0x1B, 0x24, 0xF8, 0x07, 0x00, 0x00, 0x0F,
++0x0F, 0x60, 0x01, 0x0A, 0x00, 0x05, 0x04, 0xFF,
++0x03, 0x01, 0xC6, 0x90, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x08, 0x46, 0x02, 0x02, 0xFD, 0x06, 0xF8,
++0x0B, 0xF3, 0x0F, 0x70, 0x05, 0xF9, 0x0B, 0xF1,
++0x11, 0x6E
++},
++{
++/* PAL, 640x480, bpp=8,16 */
++0X82, 0x5D, 0XE0, 0x23, 0x02, 0x64, 0x01, 0x56, 0x5A, 0x6F,
++0xA0, 0x0D, 0x0F, 0x6E, 0x24, 0xC1,
++
++0x6B, 0x0B, 0x03, 0x67, 0x40, 0x50, 0x12, 0x96,
++0xCE, 0x32, 0xFF, 0x01, 0x7E, 0xF6, 0x00, 0xA8,
++0x00, 0x00, 0x07, 0x48, 0x20, 0x1C, 0x44, 0x60,
++0x44, 0x4F, 0x1B, 0x02, 0x03, 0x80, 0x00, 0x00,
++0x0C, 0x0C, 0xD7, 0x84, 0x04, 0x68, 0x3B, 0x9C,
++0x57, 0x63, 0x17, 0xAC, 0x25, 0x80, 0x29, 0x10,
++0x00, 0x1A, 0x22, 0x2A, 0x22, 0x05, 0x02, 0x00,
++0x1C, 0x3D, 0x14, 0xFE, 0x03, 0x54, 0x01, 0xFE,
++0x7E, 0x60, 0x00, 0x08, 0x00, 0x04, 0x07, 0x55,
++0x01, 0x01, 0xA0, 0x33, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x0C, 0x4E, 0xFE, 0x03, 0xFB, 0x06, 0xF8,
++0x0A, 0xF5, 0x0C, 0x73, 0x06, 0xF8, 0x0B, 0xF2,
++0x10, 0x6F
++},
++{
++/* PAL, 800x600, bpp=8,16 */
++0X82, 0x5B, 0XE0, 0x91, 0x02, 0x73, 0x07, 0x6C, 0x70, 0xEC,
++0xA0, 0xA8, 0x0B, 0xEB, 0xAD, 0xC7,
++
++0x8B, 0x0B, 0x1A, 0x47, 0x40, 0x50, 0x12, 0x56,
++0x00, 0x37, 0xF7, 0x00, 0x7D, 0xE2, 0x00, 0xB9,
++0x00, 0x00, 0x0E, 0x48, 0x38, 0x38, 0x44, 0x62,
++0x44, 0x4F, 0x53, 0x02, 0x07, 0x80, 0x00, 0x00,
++0x0A, 0x05, 0xA2, 0x83, 0x08, 0x68, 0x46, 0x99,
++0x68, 0x63, 0x17, 0xAC, 0x25, 0x80, 0x6B, 0x10,
++0x00, 0x1A, 0x22, 0x2A, 0x22, 0x05, 0x02, 0x00,
++0x1C, 0x3D, 0x14, 0xFE, 0x03, 0x54, 0x01, 0xFE,
++0x7E, 0x60, 0x00, 0x08, 0x00, 0x04, 0x07, 0x55,
++0x01, 0x01, 0xE6, 0x90, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x0C, 0x4D, 0xFB, 0x04, 0xFB, 0x07, 0xF8,
++0x09, 0xF6, 0x0A, 0x74, 0x06, 0xF8, 0x0B, 0xF2,
++0x10, 0x6F
++},
++{
++/* PAL, 640x480, bpp=32 */
++0X82, 0x5D, 0XE0, 0x23, 0x02, 0x64, 0x01, 0x56, 0x5A, 0x6F,
++0xA0, 0x0D, 0x0F, 0x6E, 0x24, 0x81,
++
++0x6B, 0x0B, 0x02, 0x67, 0x40, 0x50, 0x12, 0x93,
++0xCE, 0x32, 0xF0, 0x01, 0x88, 0xE8, 0x00, 0xA8,
++0x00, 0x00, 0x07, 0x48, 0x20, 0x1C, 0x44, 0x60,
++0x44, 0x4F, 0x1B, 0x02, 0x03, 0x80, 0x00, 0x00,
++0x0C, 0x05, 0xE2, 0x84, 0x00, 0x68, 0x3B, 0x9C,
++0x57, 0x63, 0x17, 0xAC, 0x25, 0x80, 0x29, 0x10,
++0x00, 0x1A, 0x22, 0x2A, 0x22, 0x05, 0x02, 0x00,
++0x1C, 0x3D, 0x14, 0xFE, 0x03, 0x54, 0x01, 0xFE,
++0x7E, 0x60, 0x00, 0x08, 0x00, 0x04, 0x07, 0x55,
++0x01, 0x01, 0xA0, 0x33, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x0C, 0x4E, 0xFE, 0x03, 0xFB, 0x06, 0xF8,
++0x0A, 0xF5, 0x0C, 0x73, 0x06, 0xF8, 0x0B, 0xF2,
++0x10, 0x6F
++},
++{
++/* PAL, 800x600, bpp=32 */
++0X82, 0x5B, 0XE0, 0x91, 0x02, 0x73, 0x07, 0x6C, 0x70, 0xEC,
++0xA0, 0xA8, 0x0B, 0xEB, 0xAD, 0x87,
++
++0x8B, 0x0B, 0x1A, 0x67, 0x40, 0x50, 0x12, 0x53,
++0x00, 0x37, 0xEE, 0x00, 0x83, 0xEB, 0x00, 0xB9,
++0x00, 0x00, 0x0E, 0x48, 0x38, 0x38, 0x44, 0x62,
++0x44, 0x4F, 0x53, 0x02, 0x07, 0x80, 0x00, 0x00,
++0x0A, 0x05, 0x5E, 0x83, 0x08, 0x68, 0x46, 0x99,
++0x68, 0x63, 0x17, 0xAC, 0x25, 0x80, 0x6B, 0x10,
++0x00, 0x1A, 0x22, 0x2A, 0x22, 0x05, 0x02, 0x00,
++0x1C, 0x3D, 0x14, 0xFE, 0x03, 0x54, 0x01, 0xFE,
++0x7E, 0x60, 0x00, 0x08, 0x00, 0x04, 0x07, 0x55,
++0x01, 0x01, 0xA0, 0x22, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x0C, 0x4D, 0xFB, 0x04, 0xFB, 0x07, 0xF8,
++0x09, 0xF6, 0x0A, 0x74, 0x06, 0xF8, 0x0B, 0xF2,
++0x10, 0x6F
++}
++};
++/* TV Parameters for CH7005C */
++#define TV_CH7005C_MODE_SIZE 45
++#define TV_CH7005C_CRTC_NUM 0x10
++#define TV_CH7005C_TVREG_NUM 29
++#define TV_CH7005C_PORT 0xEA
++unsigned char TV_CH7005C_Table[TV_MODE][TV_CH7005C_MODE_SIZE]={
++{
++/* NTSC 640x480 bpp=8,16 */
++0x02, 0x80, 0x20, 0x02, 0x00, 0x5D, 0X80, 0X57, 0X80, 0X56,
++0XBA, 0X10, 0X8C, 0X50, 0XF8, 0X7F,
++
++0X6A, 0X7A, 0X00, 0X09, 0X80, 0X66, 0X00, 0X60,
++0X2E, 0XFF, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F,
++0X7E, 0X40, 0X02, 0X00, 0X08, 0X00, 0X00, 0X00,
++0X00, 0X00, 0X0A, 0X02, 0X05
++},
++{
++/* NTSC 800X600 bpp=8,16 */
++0x02, 0x80, 0x20, 0x02, 0x00, 0x7D, 0X80, 0X6E, 0X1C, 0XBA,
++0XF0, 0X70, 0X8C, 0XBA, 0X78, 0X53,
++
++0X8C, 0X4A, 0X00, 0X09, 0X80, 0XAE, 0X01, 0X80,
++0X2E, 0X02, 0X01, 0X0B, 0X7E, 0X7E, 0X7E, 0X7E,
++0X7E, 0X40, 0X01, 0X0C, 0X00, 0X00, 0X00, 0X00,
++0X00, 0X00, 0X0A, 0X00, 0X05
++},
++{
++/* NTSC 640x480 bpp=32 */
++0x02, 0x80, 0x20, 0x02, 0x00, 0x5D, 0X80, 0X57, 0X80, 0X56,
++0XBA, 0X10, 0X8C, 0X50, 0XBD, 0X57,
++
++0X6A, 0X7A, 0X00, 0X09, 0X80, 0X67, 0X00, 0X60,
++0X2E, 0XFF, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F,
++0X7E, 0X40, 0X02, 0X00, 0X07, 0X0C, 0X0D, 0X00,
++0X00, 0X00, 0X0A, 0X02, 0X05
++},
++{
++/* NTSC 800X600 bpp=32 */
++0x02, 0x80, 0x20, 0x02, 0x00, 0x7D, 0X80, 0X6E, 0X1C, 0XBA,
++0XF0, 0X70, 0X8C, 0XBA, 0XF8, 0X53,
++
++0X8C, 0X4A, 0X00, 0X09, 0X80, 0XAF, 0X01, 0X80,
++0X2E, 0X02, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F,
++0X7E, 0X40, 0X01, 0X0C, 0X00, 0X00, 0X00, 0X00,
++0X00, 0X00, 0X0A, 0X00, 0X05
++},
++{
++/* PAL 640x480 bpp=8,16 */
++0x82, 0x80, 0x20, 0x02, 0x00, 0x71, 0X74, 0X62, 0X84, 0X6F,
++0XF0, 0X10, 0X09, 0XEB, 0X80, 0X5F,
++
++0X81, 0X4A, 0X00, 0X09, 0X80, 0X84, 0X00, 0X70,
++0X28, 0X02, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F,
++0X7E, 0X40, 0X02, 0X00, 0X08, 0X00, 0X00, 0X00,
++0X00, 0X00, 0X0A, 0X01, 0X05
++},
++{
++/* PAL 800x600 bpp=8,16 */
++0x82, 0x80, 0x20, 0x02, 0x00, 0x73, 0X76, 0X6A, 0X8C, 0XEC,
++0XF0, 0X7E, 0X09, 0XEB, 0X8F, 0X8D,
++
++0X83, 0X4A, 0X00, 0X09, 0X80, 0X7E, 0X00, 0X70,
++0X3F, 0X02, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F,
++0X7E, 0X40, 0X02, 0X00, 0X08, 0X00, 0X00, 0X00,
++0X00, 0X00, 0X0A, 0X01, 0X05
++},
++{
++/* PAL 640x480 bpp=32 */
++0x82, 0x80, 0x20, 0x02, 0x00, 0x71, 0X74, 0X62, 0X84, 0X6F,
++0XF0, 0X10, 0X09, 0XEB, 0X80, 0X1F,
++
++0X81, 0X4A, 0X00, 0X09, 0X80, 0X84, 0X00, 0X70,
++0X28, 0X02, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F,
++0X7E, 0X40, 0X02, 0X00, 0X08, 0X00, 0X00, 0X00,
++0X00, 0X00, 0X0A, 0X01, 0X05
++},
++{
++/* PAL 800X600 bpp=32 */
++0x82, 0x80, 0x20, 0x02, 0x00, 0x73, 0X76, 0X6A, 0X8C, 0XEC,
++0XF0, 0X7E, 0X09, 0XEB, 0X5D, 0X48,
++
++0X83, 0X4A, 0X00, 0X09, 0X80, 0X7E, 0X00, 0X70,
++0X3F, 0X02, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F,
++0X7E, 0X40, 0X02, 0X00, 0X08, 0X00, 0X00, 0X00,
++0X00, 0X00, 0X0A, 0X01, 0X05
++}
++};
++
++static unsigned char smbus_read(ScrnInfoPtr pScrn, unsigned char bIndex, unsigned char devAdr)
++{
++    TRIDENTPtr pTrident=TRIDENTPTR(pScrn);
++    unsigned short i;
++    unsigned char  bData;
++
++    /* clear host status */
++    OUTB(SMBUS_BASE, 0xFF);
++
++    /* check SMBUS ready */
++    for ( i = 0; i < 0xFFFF; i++ )
++        if ( (INB(SMBUS_BASE) & 0x01) == 0 )
++            break;
++
++    /* set host command */
++    OUTB(SMBUS_BASE+3, bIndex);
++
++    /* set slave address */
++    OUTB(SMBUS_BASE+4, devAdr | 0x01);
++
++    /* start */
++    OUTB(SMBUS_BASE+2, 0x48);
++
++    /* SMBUS Wait Ready */
++    for ( i = 0; i < 0xFFFF; i++ )
++        if ( (INB(SMBUS_BASE) & 0x01) == 0 )
++            break;
++    bData=INB(SMBUS_BASE+5);
++
++    return bData;
++
++}
++
++static void smbus_write(ScrnInfoPtr pScrn, unsigned char bData, unsigned char bIndex, unsigned char devAdr)
++{
++    TRIDENTPtr pTrident=TRIDENTPTR(pScrn);
++    unsigned short i;
++
++    /* clear host status */
++    OUTB(SMBUS_BASE, 0xFF);
++
++    /* check SMBUS ready */
++    for ( i = 0; i < 0xFFFF; i++ )
++        if ( (INB(SMBUS_BASE) & 0x01) == 0 )
++           break;
++
++    OUTB(SMBUS_BASE+2, 0x08);
++
++    /* set host command */
++    OUTB(SMBUS_BASE+3, bIndex);
++
++    /* set slave address */
++    OUTB(SMBUS_BASE+4, devAdr & 0xFE);
++
++    OUTB(SMBUS_BASE+5, bData);
++
++    /* start */
++    OUTB(SMBUS_BASE+2, 0x48);
++
++    /* SMBUS Wait Ready */
++    for ( i = 0; i < 0xFFFF; i++ )
++    if ( (INB(SMBUS_BASE) & 0x01) == 0 )
++       break;
++}
++void VIA_SaveTVDepentVGAReg(ScrnInfoPtr pScrn)
++{
++    TRIDENTPtr pTrident=TRIDENTPTR(pScrn);
++    unsigned char protect;
++    unsigned char bTmp;
++    int i;
++    unsigned char VGA_RegIdx_about_TV[VGA_REGNUM_ABOUT_TV]={
++                  0xD8,0XD9,/* SR */
++                  0X33,/* GR */
++                  0XC0,0XD0,0XD1,0XD2,0XD3,0XE0,0XE3,0XE4,0XE5,/* CR */
++                  0XE6,0XE7,0XF0,0XF1,0XF6,0XFE,0XFF
++                  };
++    unsigned char TV_CH7005C_RegIdx[TV_CH7005C_TVREG_NUM]={
++                  0X00,0X01,0X03,0X04,0X06,0X07,0X08,0X09,
++		  0X0A,0X0B,0X0D,0X0E,0X10,0X11,0X13,0X14,
++		  0X15,0X17,0X18,0X19,0X1A,0X1B,0X1C,0X1D,
++		  0X1E,0X1F,0X20,0X21,0X3D
++                  };
++
++    /*ErrorF("VIAB3D: VIA_SaveTVDepentVGAReg:\n");*/
++
++    /* Unprotect */
++    OUTB(0x3C4, 0x11);
++    protect = INB(0x3C5);
++    OUTB(0x3C5, 0x92);
++
++    /* Set TV Hw environment */
++    OUTB(0x3d4,0xc1);
++    OUTB(0x3d5,0x41);
++
++    /* SR_d8,SR_d9 */
++    for (i=0; i<2; i++)
++    {
++        OUTB(0x3c4,VGA_RegIdx_about_TV[i]);
++        bTmp=INB(0x3c5);
++        pTrident->DefaultTVDependVGASetting[i]=bTmp;
++    }
++
++    /* GR_33 */
++    OUTB(0x3ce,0x33);
++    bTmp=INB(0x3cf);
++    pTrident->DefaultTVDependVGASetting[2]=bTmp;
++
++    /* CR_c0,d0,d1,d2,d3,e0,e3,e4,e5,e6,e7,f0,f1,f6,fe,ff */
++    for (i=3; i<VGA_REGNUM_ABOUT_TV; i++)
++    {
++        OUTB(0x3d4,VGA_RegIdx_about_TV[i]);
++        bTmp=INB(0x3d5);
++        pTrident->DefaultTVDependVGASetting[i]=bTmp;
++    }
++
++    switch (pTrident->TVChipset)
++    {
++       case 1:
++             for (i=0; i<TVX_REG_NUM; i++)
++             {
++                 bTmp=smbus_read(pScrn,i,TVX_VT1621_PORT);
++                 pTrident->DefaultTVDependVGASetting[VGA_REGNUM_ABOUT_TV+i]=bTmp;
++             }
++	     break;
++       case 2:
++             for (i=0; i<TV_CH7005C_TVREG_NUM; i++)
++	     {
++                 bTmp=smbus_read(pScrn,TV_CH7005C_RegIdx[i],TV_CH7005C_PORT);
++                 pTrident->DefaultTVDependVGASetting[VGA_REGNUM_ABOUT_TV+i]=bTmp;
++	     }
++	     break;
++       default:
++             ErrorF("VIAB3D: VIA_SaveTVDepentVGAReg: Wrong Chipset setting\n");
++	     break;
++
++    }
++    /* protect */
++    OUTB(0x3C4, 0x11);
++    OUTB(0x3C5, protect);
++}
++void VIA_RestoreTVDependVGAReg(ScrnInfoPtr pScrn)
++{
++    TRIDENTPtr pTrident=TRIDENTPTR(pScrn);
++    unsigned char protect;
++    unsigned char bTmp;
++    int i;
++    unsigned char VGA_RegIdx_about_TV[VGA_REGNUM_ABOUT_TV]={
++                  0xD8,0XD9,/* SR */
++                  0X33,/* GR */
++                  0XC0,0XD0,0XD1,0XD2,0XD3,0XE0,0XE3,0XE4,0XE5,/* CR */
++                  0XE6,0XE7,0XF0,0XF1,0XF6,0XFE,0XFF
++                  };
++    unsigned char TV_CH7005C_RegIdx[TV_CH7005C_TVREG_NUM]={
++                  0X00,0X01,0X03,0X04,0X06,0X07,0X08,0X09,
++		  0X0A,0X0B,0X0D,0X0E,0X10,0X11,0X13,0X14,
++		  0X15,0X17,0X18,0X19,0X1A,0X1B,0X1C,0X1D,
++		  0X1E,0X1F,0X20,0X21,0X3D
++                  };
++
++    /*ErrorF("VIAB3D: VIA_RestoreTVDependVGAReg:\n");*/
++
++    /* Unprotect */
++    OUTB(0x3C4, 0x11);
++    protect = INB(0x3C5);
++    OUTB(0x3C5, 0x92);
++
++    /* Set TV Hw environment */
++    OUTB(0x3d4,0xc1);
++    OUTB(0x3d5,0x41);
++
++    /* SR_d8,SR_d9 */
++    for (i=0; i<2; i++)
++    {
++        OUTB(0x3c4,VGA_RegIdx_about_TV[i]);
++        bTmp=pTrident->DefaultTVDependVGASetting[i];
++        OUTB(0x3c5,bTmp);
++    }
++    /* GR_33 */
++    OUTB(0x3ce,0x33);
++    bTmp=pTrident->DefaultTVDependVGASetting[2];
++    OUTB(0x3cf,bTmp);
++
++    /* CR_c0,d0,d1,d2,d3,e0,e3,e4,e5,e6,e7,f0,f1,f6,fe,ff */
++    for (i=3; i<VGA_REGNUM_ABOUT_TV; i++)
++    {
++        OUTB(0x3d4,VGA_RegIdx_about_TV[i]);
++        bTmp=pTrident->DefaultTVDependVGASetting[i];
++        OUTB(0x3d5,bTmp);
++    }
++    switch (pTrident->TVChipset)
++    {
++         case 1:
++                for (i=0; i<TVX_REG_NUM; i++)
++                {
++                    bTmp=pTrident->DefaultTVDependVGASetting[VGA_REGNUM_ABOUT_TV+i];
++                    smbus_write(pScrn,bTmp,i,TVX_VT1621_PORT);
++		}
++		break;
++         case 2:
++	        for (i=0; i<TV_CH7005C_TVREG_NUM; i++)
++		{
++                    bTmp=pTrident->DefaultTVDependVGASetting[VGA_REGNUM_ABOUT_TV+i];
++                    smbus_write(pScrn,bTmp,TV_CH7005C_RegIdx[i],TV_CH7005C_PORT);
++		}
++		break;
++       default:
++             ErrorF("VIAB3D: VIA_SaveTVDepentVGAReg: Wrong Chipset setting\n");
++	     break;
++    }
++    /* protect */
++    OUTB(0x3C4, 0x11);
++    OUTB(0x3C5, protect);
++}
++void VIA_TVInit(ScrnInfoPtr pScrn)
++{
++    TRIDENTPtr pTrident=TRIDENTPTR(pScrn);
++    unsigned char idx=0;
++    unsigned char i;
++    unsigned char protect;
++    unsigned char TV_CRTC[TVX_CRTC_NUM] =
++       { 0xC0,0xD0,0xD1,0xD2,0xD3,0xE0,0xE3,0xE4,0xE5,
++         0xE6,0xE7,0xF0,0xF1,0xF6,0xFE,0xFF  };
++    unsigned char TV_CH7005C_RegIdx[TV_CH7005C_TVREG_NUM]={
++                  0X00,0X01,0X03,0X04,0X06,0X07,0X08,0X09,
++		  0X0A,0X0B,0X0D,0X0E,0X10,0X11,0X13,0X14,
++		  0X15,0X17,0X18,0X19,0X1A,0X1B,0X1C,0X1D,
++		  0X1E,0X1F,0X20,0X21,0X3D
++                  };
++
++#ifdef DEBUG_CODE_TRACE
++    ErrorF("VIAB3D: VIA_TVInit:\n");
++#endif
++
++    if (pScrn->currentMode->HDisplay==640 && pScrn->currentMode->VDisplay==480 && (pScrn->depth==8 || pScrn->depth==16) && pTrident->TVSignalMode == 0)
++    {
++       /* Overlay window 1 position OK */
++       ErrorF("VIAB3D: VIA_TVInit: TV Params 640x480x8(16) NTSC\n");
++       idx=0;
++       pTrident->OverrideHsync=-71;
++       pTrident->OverrideVsync=15;
++     }
++    else if (pScrn->currentMode->HDisplay==800 && pScrn->currentMode->VDisplay==600 && (pScrn->depth==8 || pScrn->depth==16) && pTrident->TVSignalMode == 0)
++    {
++       /* Overlay window 1 position OK */
++       ErrorF("VIAB3D: VIA_TVInit: TV Params 800x600x8(16) NTSC\n");
++       idx=1;
++       pTrident->OverrideHsync=-152;
++       pTrident->OverrideVsync=72;
++       }
++    else if (pScrn->currentMode->HDisplay==640 && pScrn->currentMode->VDisplay==480 && pScrn->depth==24 && pTrident->TVSignalMode == 0)
++    {
++       ErrorF("VIAB3D: VIA_TVInit: TV Params 640x480x32 NTSC\n");
++       idx=2;
++       pTrident->OverrideHsync=-65;
++       pTrident->OverrideVsync=14;
++       }
++    else if (pScrn->currentMode->HDisplay==800 && pScrn->currentMode->VDisplay==600 && pScrn->depth==24 && pTrident->TVSignalMode == 0)
++    {
++       ErrorF("VIAB3D: VIA_TVInit: TV Params 800x600x32 NTSC\n");
++       idx=3;
++       pTrident->OverrideHsync=-158;
++       pTrident->OverrideVsync=72;
++       }
++    else if (pScrn->currentMode->HDisplay==640 && pScrn->currentMode->VDisplay==480 && (pScrn->depth==8 || pScrn->depth==16) && pTrident->TVSignalMode == 1)
++    {
++       /* Overlay window 1 position OK */
++       ErrorF("VIAB3D: VIA_TVInit: TV Params 640x480x8(16) PAL\n");
++       idx=4;
++       pTrident->OverrideHsync=2;
++       pTrident->OverrideVsync=65;
++       }
++    else if (pScrn->currentMode->HDisplay==800 && pScrn->currentMode->VDisplay==600 && (pScrn->depth==8 || pScrn->depth==16) && pTrident->TVSignalMode == 1)
++    {
++       ErrorF("VIAB3D: VIA_TVInit: TV Params 800x600x8(16) PAL\n");
++       /* patch TV screen defection */
++       idx=5;
++       /* patch 800x600 screen defect */
++       OUTB(0x3d4,0x2f);
++       OUTB(0x3d5,0xbf);
++       pTrident->OverrideHsync=-145;
++       pTrident->OverrideVsync=43;
++       }
++    else if (pScrn->currentMode->HDisplay==640 && pScrn->currentMode->VDisplay==480 && pScrn->depth==24 && pTrident->TVSignalMode == 1)
++    {
++       ErrorF("VIAB3D: VIA_TVInit: TV Params 640x480x32 PAL\n");
++       idx=6;
++       pTrident->OverrideHsync=0;
++       pTrident->OverrideVsync=63;
++       }
++    else if (pScrn->currentMode->HDisplay==800 && pScrn->currentMode->VDisplay==600 && pScrn->depth==24 && pTrident->TVSignalMode == 1)
++    {
++       ErrorF("VIAB3D: VIA_TVInit: TV Params 800x600x32 PAL\n");
++       idx=7;
++       OUTB(0x3d4,0x2f);
++       OUTB(0x3d5,0xbf);
++       pTrident->OverrideHsync=-141;
++       pTrident->OverrideVsync=42;
++       }
++    else
++    {
++       ErrorF("VIAB3D: VIA_TVInit: TV Params default mode\n");
++       return;
++    }
++
++    /* Unprotect */
++    OUTB(0x3C4, 0x11);
++    protect = INB(0x3C5);
++    OUTB(0x3C5, 0x92);
++
++    /* Set TV hw environment */
++    OUTB(0x3c4,0x24);
++    OUTB(0x3c5,0x4f);
++    OUTB(0x3d4,0xc1);
++    OUTB(0x3d5,0x41);
++    OUTB(0x3ce,0x23);
++    OUTB(0x3cf,0x88);
++
++    /* set CRT + TV */
++    OUTB(0x3CE,0x33);
++    OUTB(0x3CF,0x20);
++
++    /* set CRTC */
++    for( i = 0; i < TVX_CRTC_NUM; i++ )
++    {
++         OUTB(0x3D4, TV_CRTC[i]);
++
++	 if (pTrident->TVChipset==2) {
++            OUTB(0x3D5, TV_CH7005C_Table[idx][i]);
++	 }
++	 else {
++	    OUTB(0x3D5, TVX_VT1621_Table[idx][i]);
++	 }
++    }
++
++
++    /* Digital TV interface control */
++    switch (pTrident->TVChipset)
++    {
++           case 1: OUTB(0x3C4,0xD8);
++                   OUTB(0x3C5,0x60);
++                   OUTB(0x3C4,0xD9);
++                   OUTB(0x3C5,0x38);
++		   break;
++           case 2: OUTB(0x3c4,0xd8);
++	           OUTB(0x3c5,0x24);
++                   OUTB(0x3C4,0xD9);
++                   OUTB(0x3C5,0x18);
++		   break;
++    }
++
++    switch (pTrident->TVChipset)
++    {
++           case 1:
++                  /* set TVX registers */
++                  for (i=0; i < TVX_REG_NUM; i++ )
++                  {
++                      smbus_write(pScrn,TVX_VT1621_Table[idx][TVX_CRTC_NUM+i], i, TVX_VT1621_PORT);
++                  }
++		  break;
++           case 2:
++	          for (i=0; i<TV_CH7005C_TVREG_NUM; i++)
++		  {
++                      smbus_write(pScrn,TV_CH7005C_Table[idx][TV_CH7005C_CRTC_NUM+i], TV_CH7005C_RegIdx[i], TV_CH7005C_PORT);
++		  }
++	          break;
++    }
++
++    /*VIA_DumpReg(pScrn);*/
++
++    /* protect */
++    OUTB(0x3C4, 0x11);
++    OUTB(0x3C5, protect);
++}
++void VIA_DumpReg(ScrnInfoPtr pScrn)
++{
++    TRIDENTPtr pTrident=TRIDENTPTR(pScrn);
++    int i,j;
++    unsigned char bTmp;
++    unsigned char protect;
++
++    /* Unprotect */
++    OUTB(0x3C4, 0x11);
++    protect = INB(0x3C5);
++    OUTB(0x3C5, 0x92);
++
++    /* SR */
++    for (i=0; i<16; i++)
++    {
++        for (j=0; j<16; j++)
++	{
++            OUTB(0x3c4,(16*i+j));
++	    bTmp=INB(0x3c5);
++
++	    ErrorF("SR%02x=%02x ",(16*i+j),bTmp);
++	}
++	ErrorF("\n");
++    }
++    ErrorF("\n");
++    /* CR */
++    for (i=0; i<16; i++)
++    {
++        for (j=0; j<16; j++)
++	{
++            OUTB(0x3d4,(16*i+j));
++	    bTmp=INB(0x3d5);
++
++	    ErrorF("CR%02x=%02x ",(16*i+j),bTmp);
++	}
++	ErrorF("\n");
++    }
++    ErrorF("\n");
++    /* GR */
++    for (i=0; i<16; i++)
++    {
++        for (j=0; j<16; j++)
++	{
++            OUTB(0x3ce,(16*i+j));
++	    bTmp=INB(0x3cf);
++
++	    ErrorF("GR%02x=%02x ",(16*i+j),bTmp);
++	}
++	ErrorF("\n");
++    }
++    ErrorF("\n");
++    /* SM */
++    for (i=0; i<16; i++)
++    {
++        for (j=0; j<16; j++)
++	{
++	    if (pTrident->TVChipset==2)
++               bTmp=smbus_read(pScrn,(16*i+j),TV_CH7005C_PORT);
++	    else bTmp=smbus_read(pScrn,(16*i+j),TVX_VT1621_PORT);
++	    ErrorF("SM%02x=%02x ",(16*i+j),bTmp);
++	}
++	ErrorF("\n");
++    }
++    ErrorF("\n");
++    /* protect */
++    OUTB(0x3C4, 0x11);
++    OUTB(0x3C5, protect);
++
++}
+Index: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c,v
+retrieving revision 1.31
+retrieving revision 1.39
+diff -u -r1.31 -r1.39
+--- xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c	22 Dec 2002 18:54:43 -0000	1.31
++++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c	7 Jul 2003 22:43:51 -0000	1.39
+@@ -21,7 +21,7 @@
+  *
+  * Author:  Alan Hourihane, alanh@fairlite.demon.co.uk
+  */
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c,v 1.31 2002/12/22 18:54:43 alanh Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c,v 1.39 2003/07/07 22:43:51 alanh Exp $ */
+ 
+ #include "xf86.h"
+ #include "xf86_OSproc.h"
+@@ -67,7 +67,7 @@
+ static void tridentSetVideoParameters(TRIDENTPtr pTrident, int brightness, 
+ 				      int saturation, int hue);
+ void tridentFixFrame(ScrnInfoPtr pScrn, int *fixFrame);
+-static void WaitForSync(ScrnInfoPtr pScrn);
++static void WaitForVBlank(ScrnInfoPtr pScrn);
+ 
+ #define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE)
+ 
+@@ -255,6 +255,9 @@
+     int red, green, blue;
+     int tmp;
+ 
++    WaitForVBlank(pScrn);
++    OUTW(vgaIOBase + 4, 0x848E);
++
+     if (pTrident->Chipset >= CYBER9388) {
+     	OUTW(vgaIOBase + 4, 0x80B9); 
+     	OUTW(vgaIOBase + 4, 0x00BE); 
+@@ -326,8 +329,6 @@
+     	tridentSetVideoParameters(pTrident,pPriv->Brightness,pPriv->Saturation,
+                             pPriv->HUE);
+     }
+-
+-    OUTW(vgaIOBase + 4, 0x848E);
+ }
+ 
+ 
+@@ -407,37 +408,6 @@
+ }
+ 
+ 
+-static Bool
+-RegionsEqual(RegionPtr A, RegionPtr B)
+-{
+-    int *dataA, *dataB;
+-    int num;
+-
+-    num = REGION_NUM_RECTS(A);
+-    if(num != REGION_NUM_RECTS(B))
+-	return FALSE;
+-
+-    if((A->extents.x1 != B->extents.x1) ||
+-       (A->extents.x2 != B->extents.x2) ||
+-       (A->extents.y1 != B->extents.y1) ||
+-       (A->extents.y2 != B->extents.y2))
+-	return FALSE;
+-
+-    dataA = (int*)REGION_RECTS(A);
+-    dataB = (int*)REGION_RECTS(B);
+-
+-    while(num--) {
+-	if((dataA[0] != dataB[0]) || (dataA[1] != dataB[1]))
+-	   return FALSE;
+-	dataA += 2; 
+-	dataB += 2;
+-    }
+-
+-    return TRUE;
+-}
+-
+-#define DummyScreen screenInfo.screens[0]
+-
+ static void 
+ TRIDENTStopVideo(ScrnInfoPtr pScrn, pointer data, Bool shutdown)
+ {
+@@ -449,9 +419,9 @@
+ 
+   if(shutdown) {
+      if(pPriv->videoStatus & CLIENT_VIDEO_ON) {
+-	 OUTW(vgaIOBase + 4, 0x0091);
+-	 WaitForSync(pScrn);
+-	 OUTW(vgaIOBase + 4, 0x848E);
++    	WaitForVBlank(pScrn);
++	OUTW(vgaIOBase + 4, 0x848E);
++	OUTW(vgaIOBase + 4, 0x0091);
+      }
+      if(pPriv->linear) {
+ 	xf86FreeOffscreenLinear(pPriv->linear);
+@@ -616,55 +586,6 @@
+ }
+ 
+ 
+-static void
+-TRIDENTCopyData(
+-  unsigned char *src,
+-  unsigned char *dst,
+-  int srcPitch,
+-  int dstPitch,
+-  int h,
+-  int w
+-){
+-    w <<= 1;
+-    while(h--) {
+-	memcpy(dst, src, w);
+-	src += srcPitch;
+-	dst += dstPitch;
+-    }
+-}
+-
+-static void
+-TRIDENTCopyMungedData(
+-   unsigned char *src1,
+-   unsigned char *src2,
+-   unsigned char *src3,
+-   unsigned char *dst1,
+-   int srcPitch,
+-   int srcPitch2,
+-   int dstPitch,
+-   int h,
+-   int w
+-){
+-   CARD32 *dst = (CARD32*)dst1;
+-   int i, j;
+-
+-   dstPitch >>= 2;
+-   w >>= 1;
+-
+-   for(j = 0; j < h; j++) {
+-	for(i = 0; i < w; i++) {
+-	    dst[i] = src1[i << 1] | (src1[(i << 1) + 1] << 16) |
+-		     (src3[i] << 8) | (src2[i] << 24);
+-	}
+-	dst += dstPitch;
+-	src1 += srcPitch;
+-	if(j & 1) {
+-	    src2 += srcPitch2;
+-	    src3 += srcPitch2;
+-	}
+-   }
+-}
+-
+ static FBLinearPtr
+ TRIDENTAllocateMemory(
+    ScrnInfoPtr pScrn,
+@@ -852,7 +773,7 @@
+     	} else {
+     	    OUTW(0x3C4, 0x0097); /* 1x line buffers */
+     	}
+-    	OUTW(vgaIOBase + 4, 0x8097); 
++    	OUTW(vgaIOBase + 4, 0x0097); 
+     	OUTW(vgaIOBase + 4, 0x00BA);
+     	OUTW(vgaIOBase + 4, 0x00BB);
+     	OUTW(vgaIOBase + 4, 0xFFBC);
+@@ -960,23 +881,23 @@
+ 	   offset3 = tmp;
+ 	}
+ 	nlines = ((((y2 + 0xffff) >> 16) + 1) & ~1) - top;
+-	TRIDENTCopyMungedData(buf + (top * srcPitch) + (left >> 1), 
+-			  buf + offset2, buf + offset3, dst_start,
+-			  srcPitch, srcPitch2, dstPitch, nlines, npixels);
++	xf86XVCopyYUV12ToPacked(buf + (top * srcPitch) + (left >> 1), 
++				buf + offset2, buf + offset3, dst_start,
++				srcPitch, srcPitch2, dstPitch, nlines, npixels);
+ 	break;
+     case FOURCC_UYVY:
+     case FOURCC_YUY2:
+     default:
+ 	buf += (top * srcPitch) + left;
+ 	nlines = ((y2 + 0xffff) >> 16) - top;
+-	TRIDENTCopyData(buf, dst_start, srcPitch, dstPitch, nlines, npixels);
++	xf86XVCopyPacked(buf, dst_start, srcPitch, dstPitch, nlines, npixels);
+         break;
+     }
+ 
+     /* update cliplist */
+-    if(!RegionsEqual(&pPriv->clip, clipBoxes)) {
++    if(!REGION_EQUAL(pScrn->pScreen, &pPriv->clip, clipBoxes)) {
+     	/* update cliplist */
+-        REGION_COPY(pScreen, &pPriv->clip, clipBoxes);
++        REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes);
+         xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes);
+     }
+ 
+@@ -1101,10 +1022,9 @@
+     if(pPriv->isOn) {
+ 	TRIDENTPtr pTrident = TRIDENTPTR(surface->pScrn);
+     	int vgaIOBase = VGAHWPTR(surface->pScrn)->IOBase;
+-
+-	OUTW(vgaIOBase + 4, 0x0091);
+-	WaitForSync(surface->pScrn);
++	WaitForVBlank(surface->pScrn);
+  	OUTW(vgaIOBase + 4, 0x848E);
++	OUTW(vgaIOBase + 4, 0x0091);
+ 	pPriv->isOn = FALSE;
+     }
+ 
+@@ -1249,9 +1169,9 @@
+     if(pPriv->videoStatus & TIMER_MASK) {
+ 	if(pPriv->videoStatus & OFF_TIMER) {
+ 	    if(pPriv->offTime < time) {
+-		OUTW(vgaIOBase + 4, 0x0091);
+-		WaitForSync(pScrn);
++		WaitForVBlank(pScrn);
+   		OUTW(vgaIOBase + 4, 0x848E);
++		OUTW(vgaIOBase + 4, 0x0091);
+ 		pPriv->videoStatus = FREE_TIMER;
+ 		pPriv->freeTime = time + FREE_DELAY;
+ 	    }
+@@ -1369,7 +1289,10 @@
+ 	case CYBERBLADEI7D:
+ 	case CYBERBLADEI1:
+ 	case CYBERBLADEI1D:
+-	    pTrident->hsync -= 8;
++	    if (pScrn->depth == 24)
++		pTrident->hsync -= 7;
++	    else
++		pTrident->hsync -= 6;
+ 	    break;
+ 	case CYBERBLADEAI1:
+ 	    pTrident->hsync -= 7;
+@@ -1399,10 +1322,18 @@
+ }
+     
+ static void
+-WaitForSync(ScrnInfoPtr	pScrn)
++WaitForVBlank(ScrnInfoPtr pScrn)
+ {
+     register vgaHWPtr hwp = VGAHWPTR(pScrn);
+ 
++    /* We have to wait for one full VBlank to let the video engine start/stop.
++     * So the first may be waiting for too short a period as it may already
++     * be part way through the video frame. So we wait a second time to ensure
++     * full vblank has passed. 
++     * - Alan.
++     */
++    while (!(hwp->readST01(hwp)&0x8)) {};
++    while (hwp->readST01(hwp)&0x8) {};
+     while (!(hwp->readST01(hwp)&0x8)) {};
+     while (hwp->readST01(hwp)&0x8) {};
+ }


Property changes on: trunk/debian/patches/000_stolen_from_HEAD_trident_driver.diff
___________________________________________________________________
Name: svn:keywords
   + Id

Modified: trunk/debian/patches/030_Xserver_and_driver_region_primitive_fixups.diff
===================================================================
--- trunk/debian/patches/030_Xserver_and_driver_region_primitive_fixups.diff	2004-08-10 23:53:36 UTC (rev 1724)
+++ trunk/debian/patches/030_Xserver_and_driver_region_primitive_fixups.diff	2004-08-11 01:28:34 UTC (rev 1725)
@@ -9,6 +9,8 @@
 
 Revert same REGION_EQUAL change in nv driver.
 
+Revert same REGION_EQUAL change in trident driver.
+
 --- xc/programs/Xserver/hw/xfree86/drivers/ati/atimach64xv.c~	2004-05-05 17:08:17.000000000 -0500
 +++ xc/programs/Xserver/hw/xfree86/drivers/ati/atimach64xv.c	2004-05-07 12:43:34.000000000 -0500
 @@ -34,6 +34,38 @@
@@ -212,6 +214,52 @@
      {
  	/* we always paint V4L's color key */
  	if(!pPriv->grabbedByV4L)
+--- xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c~	2004-08-09 20:31:32.000000000 -0500
++++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c	2004-08-09 20:34:03.000000000 -0500
+@@ -407,6 +407,34 @@
+     return adapt;
+ }
+ 
++static Bool
++RegionsEqual(RegionPtr A, RegionPtr B)
++{
++    int *dataA, *dataB;
++    int num;
++
++    num = REGION_NUM_RECTS(A);
++    if(num != REGION_NUM_RECTS(B))
++	return FALSE;
++
++    if((A->extents.x1 != B->extents.x1) ||
++       (A->extents.x2 != B->extents.x2) ||
++       (A->extents.y1 != B->extents.y1) ||
++       (A->extents.y2 != B->extents.y2))
++	return FALSE;
++
++    dataA = (int*)REGION_RECTS(A);
++    dataB = (int*)REGION_RECTS(B);
++
++    while(num--) {
++	if((dataA[0] != dataB[0]) || (dataA[1] != dataB[1]))
++	   return FALSE;
++	dataA += 2;
++	dataB += 2;
++    }
++
++    return TRUE;
++}
+ 
+ static void 
+ TRIDENTStopVideo(ScrnInfoPtr pScrn, pointer data, Bool shutdown)
+@@ -895,7 +923,7 @@
+     }
+ 
+     /* update cliplist */
+-    if(!REGION_EQUAL(pScrn->pScreen, &pPriv->clip, clipBoxes)) {
++    if(!RegionsEqual(&pPriv->clip, clipBoxes)) {
+     	/* update cliplist */
+         REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes);
+         xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes);
 --- xc/programs/Xserver/include/regionstr.h~	2004-05-05 17:21:32.000000000 -0500
 +++ xc/programs/Xserver/include/regionstr.h	2004-05-05 17:22:02.000000000 -0500
 @@ -285,10 +285,21 @@

Modified: trunk/debian/patches/911_debian_XF86Config_to_XF86Config-4.diff
===================================================================
--- trunk/debian/patches/911_debian_XF86Config_to_XF86Config-4.diff	2004-08-10 23:53:36 UTC (rev 1724)
+++ trunk/debian/patches/911_debian_XF86Config_to_XF86Config-4.diff	2004-08-11 01:28:34 UTC (rev 1725)
@@ -887,18 +887,18 @@
  .SH AUTHORS
  Authors include: ...
 diff -urN xc/programs/Xserver/hw/xfree86~/drivers/trident/trident.man xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man
---- xc/programs/Xserver/hw/xfree86~/drivers/trident/trident.man	2003-01-06 05:15:26.000000000 -0500
-+++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man	2004-08-02 17:24:09.000000000 -0500
+--- xc/programs/Xserver/hw/xfree86~/drivers/trident/trident.man	2004-08-10 17:18:39.000000000 -0500
++++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident.man	2004-08-10 17:19:26.000000000 -0500
 @@ -41,7 +41,7 @@
  8900C, 8900D, 9000, 9200CXr, Cyber9320, 9400CXi, 9440AGi
- These cards have been ported but need furthur testing and may not work.
+ These cards have been ported but need further testing and may not work.
  .SH CONFIGURATION DETAILS
 -Please refer to XF86Config(__filemansuffix__) for general configuration
 +Please refer to XF86Config-4(__filemansuffix__) for general configuration
  details.  This section only covers configuration details specific to this
  driver.
  .PP
-@@ -120,6 +120,6 @@
+@@ -128,6 +128,6 @@
  Default: gamma and brightness control is turned off. 
  Note: This is not supported on all chipsets.
  .SH "SEE ALSO"



Reply to: