diff options
author | Alex Deucher <agd5f@yahoo.com> | 2004-10-17 20:29:32 +0000 |
---|---|---|
committer | Alex Deucher <agd5f@yahoo.com> | 2004-10-17 20:29:32 +0000 |
commit | 0147cb45138ccd06477dc7f973ae20c1405f2bf5 (patch) | |
tree | 4a0c7c74d78b11bb4b54d59d7907aca8d840becc | |
parent | b66a0081cec6427604758371907ac6c7dca532a3 (diff) |
- Add interlaced support to S3 driver (bug 332, Leo Savernik)XORG-6_8_99_3XORG-6_8_99_2XORG-6_8_99_1
- EmulateWheelTimeout (bug 323, Mathias Fröhlich)
- single button double-click (bug 322, Rob Brown)
-rw-r--r-- | src/s3_driver.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/s3_driver.c b/src/s3_driver.c index b5f537d..abd720e 100644 --- a/src/s3_driver.c +++ b/src/s3_driver.c @@ -699,7 +699,7 @@ static Bool S3PreInit(ScrnInfoPtr pScrn, int flags) clockRanges->minClock = 15600; clockRanges->maxClock = pS3->MaxClock; clockRanges->clockIndex = -1; - clockRanges->interlaceAllowed = FALSE; /* not yet */ + clockRanges->interlaceAllowed = TRUE; /* not yet */ clockRanges->doubleScanAllowed = TRUE; /* not yet */ i = xf86ValidateModes(pScrn, pScrn->monitor->Modes, @@ -1076,6 +1076,7 @@ static Bool S3ModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode) vgaRegPtr pVga = &hwp->ModeReg; int vgaCRIndex = pS3->vgaCRIndex, vgaCRReg = pS3->vgaCRReg; int vgaIOBase = hwp->IOBase; + int interlacedived = mode->Flags & V_INTERLACE ? 1 : 0; int r, n, m; unsigned char tmp; @@ -1109,6 +1110,15 @@ static Bool S3ModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode) } } + /* This shouldn't be needed -- they should be set by vgaHWInit() */ + if (!mode->CrtcVAdjusted) { + mode->CrtcVTotal >>= interlacedived; + mode->CrtcVDisplay >>= interlacedived; + mode->CrtcVSyncStart >>= interlacedived; + mode->CrtcVSyncEnd >>= interlacedived; + mode->CrtcVAdjusted = TRUE; + } + if (!vgaHWInit(pScrn, mode)) return FALSE; @@ -1387,9 +1397,15 @@ static Bool S3ModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode) outb(vgaCRReg, new->cr62); } - outb(vgaCRIndex, 0x42); - new->cr42 = inb(vgaCRReg) & ~0x20; - outb(vgaCRReg, new->cr42); + if (mode->Flags & V_INTERLACE) { + outb(vgaCRIndex, 0x42); + new->cr42 = inb(vgaCRReg) | 0x20; + outb(vgaCRReg, new->cr42); + } else { + outb(vgaCRIndex, 0x42); + new->cr42 = inb(vgaCRReg) & ~0x20; + outb(vgaCRReg, new->cr42); + } if (pS3->Chipset == PCI_CHIP_968) { unsigned char a; |