summaryrefslogtreecommitdiffstats
path: root/drivers/video/tridentfb.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/tridentfb.c')
-rw-r--r--drivers/video/tridentfb.c29
1 files changed, 23 insertions, 6 deletions
diff --git a/drivers/video/tridentfb.c b/drivers/video/tridentfb.c
index e79788a..9668be8 100644
--- a/drivers/video/tridentfb.c
+++ b/drivers/video/tridentfb.c
@@ -87,7 +87,17 @@ MODULE_PARM_DESC(crt, "Define if CRT is connected");
static int is_oldclock(int id)
{
- return (id == TGUI9660);
+ return (id == TGUI9660) ||
+ (id == CYBER9320);
+}
+
+static int is_oldprotect(int id)
+{
+ return (id == TGUI9660) ||
+ (id == PROVIDIA9685) ||
+ (id == CYBER9320) ||
+ (id == CYBER9382) ||
+ (id == CYBER9385);
}
static int is_blade(int id)
@@ -143,6 +153,7 @@ static int iscyber(int id)
case CYBER9320:
case TGUI9660:
+ case PROVIDIA9685:
case IMAGE975:
case IMAGE985:
case BLADE3D:
@@ -905,14 +916,14 @@ static int tridentfb_set_par(struct fb_info *info)
hsyncend = (var->xres + var->right_margin + var->hsync_len) / 8 - 1;
htotal = (var->xres + var->left_margin + var->right_margin +
var->hsync_len) / 8 - 5;
- hblankstart = hdispend + 2;
+ hblankstart = hdispend + 1;
hblankend = htotal + 3;
vdispend = var->yres - 1;
vsyncstart = var->yres + var->lower_margin;
vsyncend = vsyncstart + var->vsync_len;
vtotal = var->upper_margin + vsyncend - 2;
- vblankstart = vdispend + 2;
+ vblankstart = vdispend + 1;
vblankend = vtotal;
crtc_unlock(par);
@@ -1020,15 +1031,18 @@ static int tridentfb_set_par(struct fb_info *info)
write3X4(par, PixelBusReg, tmp);
- tmp = 0x10;
+ tmp = read3X4(par, DRAMControl);
+ if (!is_oldprotect(par->chip_id))
+ tmp |= 0x10;
if (iscyber(par->chip_id))
tmp |= 0x20;
write3X4(par, DRAMControl, tmp); /* both IO, linear enable */
write3X4(par, InterfaceSel, read3X4(par, InterfaceSel) | 0x40);
- write3X4(par, Performance, 0x92);
+ if (!is_xp(par->chip_id))
+ write3X4(par, Performance, read3X4(par, Performance) | 0x10);
/* MMIO & PCI read and write burst enable */
- write3X4(par, PCIReg, 0x07);
+ write3X4(par, PCIReg, read3X4(par, PCIReg) | 0x06);
/* convert from picoseconds to kHz */
vclk = PICOS2KHZ(info->var.pixclock);
@@ -1230,6 +1244,9 @@ static int __devinit trident_pci_probe(struct pci_dev *dev,
revision = vga_io_rseq(RevisionID);
switch (revision) {
+ case 0x21:
+ chip_id = PROVIDIA9685;
+ break;
case 0x22:
case 0x23:
chip_id = CYBER9397;
OpenPOWER on IntegriCloud