diff options
author | Luc Verhaegen <libv@skynet.be> | 2004-08-04 17:01:15 +0000 |
---|---|---|
committer | Luc Verhaegen <libv@skynet.be> | 2004-08-04 17:01:15 +0000 |
commit | 7b4053122db174dea6535b7fdbcec69bac371890 (patch) | |
tree | 234a3f65f999698f74230f3e6d0e2cabbe9f15c2 | |
parent | f3dd7f7586e4a25d8f162b697b5a9edc93c6e070 (diff) |
[devel-pBIOSInfo_remove_pVia_entries]
- Remove following entries from pBIOSInfo which are duplicated from pVia:
Chipset, ChipRev, FBBase, IsSecondary, HasSecondary, I2C_Port1,
I2C_Port2, DDC1, DDC2.
- Move MemClk to pVia, move retrieval to PreInit.
- Move FirstInit to pVia, move clearing memory to WriteMode.
- Move SAMM and GpioI2c to pVIA, remove I2CDevPtr dev.
- Stop DecideOverlaySupport from checking memory bandwidth itself, move to
pVia->MemClk instead.
- Remove handful of unused pVia entries.
-rw-r--r-- | src/via_bandwidth.c | 48 | ||||
-rw-r--r-- | src/via_bios.h | 25 | ||||
-rw-r--r-- | src/via_driver.c | 63 | ||||
-rw-r--r-- | src/via_driver.h | 14 | ||||
-rw-r--r-- | src/via_i2c.c | 2 | ||||
-rw-r--r-- | src/via_mode.c | 380 | ||||
-rw-r--r-- | src/via_video.c | 10 |
7 files changed, 261 insertions, 281 deletions
diff --git a/src/via_bandwidth.c b/src/via_bandwidth.c index bb43959..8cd9ea4 100644 --- a/src/via_bandwidth.c +++ b/src/via_bandwidth.c @@ -96,7 +96,7 @@ static void ViaSetPrimaryExpireNumber(ScrnInfoPtr pScrn, DisplayModePtr mode, ViaExpireNumberTable *Expire) { vgaHWPtr hwp = VGAHWPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; + VIAPtr pVia = VIAPTR(pScrn); DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaSetPrimaryExpireNumber\n")); @@ -104,7 +104,7 @@ ViaSetPrimaryExpireNumber(ScrnInfoPtr pScrn, DisplayModePtr mode, ViaExpireNumbe if ((Expire->X == mode->CrtcHDisplay) && (Expire->Y == mode->CrtcVDisplay) && (Expire->Bpp == pScrn->bitsPerPixel) && - (Expire->bRamClock == pBIOSInfo->MemClk)) { + (Expire->bRamClock == pVia->MemClk)) { ViaSeqChange(hwp, 0x22, Expire->bTuningValue, 0x1F); return; } @@ -141,14 +141,14 @@ void ViaSetPrimaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode) { vgaHWPtr hwp = VGAHWPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; + VIAPtr pVia = VIAPTR(pScrn); DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaSetPrimaryFIFO\n")); - switch(pBIOSInfo->Chipset) { + switch(pVia->Chipset) { case VIA_CLE266: - if (CLE266_REV_IS_CX(pBIOSInfo->ChipRev)) { - if (pBIOSInfo->HasSecondary) { /* SAMM or DuoView case */ + if (CLE266_REV_IS_CX(pVia->ChipRev)) { + if (pVia->HasSecondary) { /* SAMM or DuoView case */ if (mode->HDisplay >= 1024) { ViaSeqChange(hwp, 0x16, 0x1C, 0x3F); /* 28 */ hwp->writeSeq(hwp, 0x17, 0x3F); /* 63 */ @@ -164,7 +164,7 @@ ViaSetPrimaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode) /* originally when setting secondary */ ViaSetPrimaryExpireNumber(pScrn, mode, CLE266CExpireNumber); } else { - if ((mode->HDisplay > 1024) && pBIOSInfo->HasSecondary) { + if ((mode->HDisplay > 1024) && pVia->HasSecondary) { ViaSetCLE266APrimaryFIFO(pScrn, TRUE); ViaSeqChange(hwp, 0x16, 0x17, 0x3F); /* 23 */ @@ -179,9 +179,9 @@ ViaSetPrimaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode) ViaSetPrimaryFetchCount(pScrn, mode->CrtcHDisplay); break; case VIA_KM400: - if (pBIOSInfo->HasSecondary) { /* SAMM or DuoView case */ + if (pVia->HasSecondary) { /* SAMM or DuoView case */ if ((mode->HDisplay >= 1600) && - (pBIOSInfo->MemClk <= VIA_MEM_DDR200)) { + (pVia->MemClk <= VIA_MEM_DDR200)) { ViaSeqChange(hwp, 0x16, 0x09, 0x3F); /* 9 */ hwp->writeSeq(hwp, 0x17, 0x1C); /* 28 */ } else { @@ -234,7 +234,7 @@ ViaSetPrimaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode) #endif /* HAVE_PM800 */ default: xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "ViaSetPrimaryFIFO:" - " Chipset %d not implemented", pBIOSInfo->Chipset); + " Chipset %d not implemented", pVia->Chipset); break; } @@ -270,13 +270,13 @@ void ViaSetSecondaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode) { vgaHWPtr hwp = VGAHWPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; + VIAPtr pVia = VIAPTR(pScrn); DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaSetSecondaryFIFO\n")); - switch (pBIOSInfo->Chipset) { + switch (pVia->Chipset) { case VIA_CLE266: - if (CLE266_REV_IS_CX(pBIOSInfo->ChipRev)) { + if (CLE266_REV_IS_CX(pVia->ChipRev)) { if (mode->HDisplay >= 1024) { ViaCrtcChange(hwp, 0x6A, 0x20, 0x20); hwp->writeCrtc(hwp, 0x68, 0xAB); /* depth: 10, threshold: 11 */ @@ -286,8 +286,8 @@ ViaSetSecondaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode) } } else { if ((pScrn->bitsPerPixel >= 24) && - (((pBIOSInfo->panelY > 768) && (pBIOSInfo->MemClk <= VIA_MEM_DDR200)) || - ((pBIOSInfo->panelX > 1280) && (pBIOSInfo->MemClk <= VIA_MEM_DDR266)))) { + (((mode->VDisplay > 768) && (pVia->MemClk <= VIA_MEM_DDR200)) || + ((mode->HDisplay > 1280) && (pVia->MemClk <= VIA_MEM_DDR266)))) { ViaCrtcChange(hwp, 0x6A, 0x20, 0x20); hwp->writeCrtc(hwp, 0x68, 0xAB); /* depth: 10, threshold: 11 */ } else { @@ -298,17 +298,17 @@ ViaSetSecondaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode) ViaSetSecondaryFetchCount(pScrn, mode->CrtcHDisplay); break; case VIA_KM400: - if ((mode->HDisplay >= 1600) && (pBIOSInfo->MemClk <= VIA_MEM_DDR200)) { + if ((mode->HDisplay >= 1600) && (pVia->MemClk <= VIA_MEM_DDR200)) { ViaCrtcChange(hwp, 0x6A, 0x20, 0x20); hwp->writeCrtc(hwp, 0x68, 0xEB); /* depth: 14, threshold: 11 */ } else if ((pScrn->bitsPerPixel == 32) && - (((mode->HDisplay > 1024) && (pBIOSInfo->MemClk <= VIA_MEM_DDR333)) || - ((mode->HDisplay >= 1024) && (pBIOSInfo->MemClk <= VIA_MEM_DDR200)))) { + (((mode->HDisplay > 1024) && (pVia->MemClk <= VIA_MEM_DDR333)) || + ((mode->HDisplay >= 1024) && (pVia->MemClk <= VIA_MEM_DDR200)))) { ViaCrtcChange(hwp, 0x6A, 0x20, 0x20); hwp->writeCrtc(hwp, 0x68, 0xCA); /* depth: 12, threshold: 10 */ } else if ((pScrn->bitsPerPixel == 16) && - (((mode->HDisplay > 1280) && (pBIOSInfo->MemClk <= VIA_MEM_DDR333)) || - ((mode->HDisplay >= 1280) && (pBIOSInfo->MemClk <= VIA_MEM_DDR200)))) { + (((mode->HDisplay > 1280) && (pVia->MemClk <= VIA_MEM_DDR333)) || + ((mode->HDisplay >= 1280) && (pVia->MemClk <= VIA_MEM_DDR200)))) { ViaCrtcChange(hwp, 0x6A, 0x20, 0x20); hwp->writeCrtc(hwp, 0x68, 0xAB); /* depth: 10, threshold: 11 */ } else { @@ -365,7 +365,7 @@ ViaSetSecondaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode) #endif /* HAVE_PM800 */ default: xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "ViaSetSecondaryFIFO:" - " Chipset %d not implemented", pBIOSInfo->Chipset); + " Chipset %d not implemented", pVia->Chipset); break; } } @@ -376,13 +376,13 @@ ViaSetSecondaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode) void ViaDisablePrimaryFIFO(ScrnInfoPtr pScrn) { - VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; + VIAPtr pVia = VIAPTR(pScrn); DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaDisablePrimaryFIFO\n")); /* Cause of exit XWindow will dump back register value, others chipset no * need to set extended fifo value */ - if ((pBIOSInfo->Chipset == VIA_CLE266) && CLE266_REV_IS_AX(pBIOSInfo->ChipRev) && - ((pScrn->currentMode->HDisplay > 1024) || pBIOSInfo->HasSecondary)) + if ((pVia->Chipset == VIA_CLE266) && CLE266_REV_IS_AX(pVia->ChipRev) && + ((pScrn->currentMode->HDisplay > 1024) || pVia->HasSecondary)) ViaSetCLE266APrimaryFIFO(pScrn, FALSE); } diff --git a/src/via_bios.h b/src/via_bios.h index b354187..b550286 100644 --- a/src/via_bios.h +++ b/src/via_bios.h @@ -384,24 +384,11 @@ typedef struct _VIABIOSINFO { CARD8 BIOSDateMonth; CARD8 BIOSDateDay; - int Chipset; - int ChipRev; - CARD8 MemClk; - - Bool FirstInit; - CARD8 * FBBase; - CARD32 videoRambytes; - CARD16 ModeIndex; CARD16 ResolutionIndex; CARD16 RefreshIndex; int Refresh; - /* MHS */ - Bool SAMM; /* SAMM success or not? */ - Bool IsSecondary; - Bool HasSecondary; - CARD8 ConnectedDevice; CARD8 ActiveDevice; CARD8 DefaultActiveDevice; @@ -434,16 +421,6 @@ typedef struct _VIABIOSINFO { CARD16 TVIndex; CARD8 TVI2CAdd; CARD8 TVRegs[0xFF]; - - /* I2C & DDC */ - I2CBusPtr I2C_Port1; - I2CBusPtr I2C_Port2; - xf86MonPtr DDC1; - xf86MonPtr DDC2; - I2CDevPtr dev; - GpioI2cRec GpioI2c; /* should be weened off, but we have no info, - no hardware that this code is known to - work with (properly) */ } VIABIOSInfoRec, *VIABIOSInfoPtr; /* Functions protype */ @@ -451,7 +428,7 @@ typedef struct _VIABIOSINFO { void ViaModeTablesInit(VIABIOSInfoPtr pBIOSInfo); /* via_mode.c */ -int VIACheckTVExist(VIABIOSInfoPtr pBIOSInfo); +void VIACheckTVExist(ScrnInfoPtr pScrn); CARD8 VIAGetActiveDisplay(ScrnInfoPtr pScrn); Bool VIAPostDVI(ScrnInfoPtr pScrn); CARD8 VIAGetDeviceDetect(ScrnInfoPtr pScrn); diff --git a/src/via_driver.c b/src/via_driver.c index 0cbebcb..d43494a 100644 --- a/src/via_driver.c +++ b/src/via_driver.c @@ -416,7 +416,7 @@ static Bool VIAGetRec(ScrnInfoPtr pScrn) ((VIARec *)(pScrn->driverPrivate))->pBIOSInfo->pModeTable = xnfcalloc(sizeof(VIAModeTableRec), 1); - ((VIARec *)(pScrn->driverPrivate))->pBIOSInfo->FirstInit = TRUE; + ((VIARec *)(pScrn->driverPrivate))->FirstInit = TRUE; ((VIARec *)(pScrn->driverPrivate))->V4Lfd = -1; @@ -1208,8 +1208,6 @@ static Bool VIAPreInit(ScrnInfoPtr pScrn, int flags) pScrn->videoRam, pEnt->device->videoRam); } } - pBIOSInfo->Chipset = pVia->Chipset; - pBIOSInfo->ChipRev = pVia->ChipRev; xfree(pEnt); @@ -1275,6 +1273,10 @@ static Bool VIAPreInit(ScrnInfoPtr pScrn, int flags) } xf86DrvMsg(pScrn->scrnIndex, from, "Chipset Rev.: %d\n", pVia->ChipRev); + /* read memory bandwidth from registers */ + pVia->MemClk = hwp->readCrtc(hwp, 0x3D) >> 4; + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Detected MemClk %d\n", pVia->MemClk)); + ViaModeTablesInit(pBIOSInfo); ViaVBEGetBIOSVersion(pScrn); ViaVBEGetBIOSDate(pScrn); @@ -1428,15 +1430,10 @@ static Bool VIAPreInit(ScrnInfoPtr pScrn, int flags) pVia->Bpp = pScrn->bitsPerPixel >> 3; pVia->Bpl = pScrn->displayWidth * pVia->Bpp; - pBIOSInfo->I2C_Port1 = pVia->I2C_Port1; - pBIOSInfo->I2C_Port2 = pVia->I2C_Port2; - pBIOSInfo->DDC1 = pVia->DDC1; - pBIOSInfo->DDC2 = pVia->DDC2; - /* Detect TV Encoder */ - if (!pBIOSInfo->TVEncoder) { - pBIOSInfo->TVEncoder = VIACheckTVExist(pBIOSInfo); - } + if (!pBIOSInfo->TVEncoder) + VIACheckTVExist(pScrn); + /* Detect TMDS/LVDS Encoder */ VIAPostDVI(pScrn); /*VIAGetPanelInfo(pScrn);*/ @@ -1544,7 +1541,7 @@ static Bool VIAPreInit(ScrnInfoPtr pScrn, int flags) VIADeviceSelection(pScrn); if (pVia->IsSecondary) { - if (pBIOSInfo->SAMM) + if (pVia->SAMM) VIADeviceDispatch(pScrn); else { VIAFreeRec(pScrn); @@ -1699,9 +1696,9 @@ static void VIASave(ScrnInfoPtr pScrn) case VIA_NONETV: break; case VIA_VT1623: - VIAGPIOI2C_Initial(&(pBIOSInfo->GpioI2c), 0x40); + VIAGPIOI2C_Initial(&(pVia->GpioI2c), 0x40); for (i = 0; i < 0x6C; i++) { - VIAGPIOI2C_ReadByte(&(pBIOSInfo->GpioI2c), i, (TVRegs + i)); + VIAGPIOI2C_ReadByte(&(pVia->GpioI2c), i, (TVRegs + i)); save->TVRegs[i] = TVRegs[i]; /*DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Save TV Register[%d]0x%X\n", i, save->TVRegs[i]));*/ } @@ -1785,9 +1782,9 @@ VIARestoreRegs(ScrnInfoPtr pScrn, vgaRegPtr vgaSavePtr, VIARegPtr restore) xf86DestroyI2CDevRec(dev,TRUE); break; case VIA_VT1623: - VIAGPIOI2C_Initial(&(pBIOSInfo->GpioI2c), 0x40); + VIAGPIOI2C_Initial(&(pVia->GpioI2c), 0x40); for (i = 0; i < 0x6C; i++) { - VIAGPIOI2C_Write(&(pBIOSInfo->GpioI2c), i, restore->TVRegs[i]); + VIAGPIOI2C_Write(&(pVia->GpioI2c), i, restore->TVRegs[i]); /*DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Write Back Register[%d]:0x%X\n", i, restore->TVRegs[i]));*/ } break; @@ -1959,7 +1956,6 @@ static Bool VIAMapMMIO(ScrnInfoPtr pScrn) static Bool VIAMapFB(ScrnInfoPtr pScrn) { VIAPtr pVia = VIAPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAMapFB\n")); xf86DrvMsg(pScrn->scrnIndex, X_PROBED, @@ -1988,8 +1984,6 @@ static Bool VIAMapFB(ScrnInfoPtr pScrn) pVia->FBBase = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_FRAMEBUFFER, pVia->PciTag, pVia->FrameBufferBase, pVia->videoRambytes); - pBIOSInfo->FBBase = pVia->FBBase; - pBIOSInfo->videoRambytes = pVia->videoRambytes; if (!pVia->FBBase) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, @@ -2091,7 +2085,7 @@ viaFillGraphicInfo(ScrnInfoPtr pScrn, DisplayModePtr mode) graphicInfo->RevisionID = pVia->ChipRev; graphicInfo->dwDeviceID = pVia->ChipId; - graphicInfo->SAMM = pBIOSInfo->SAMM; + graphicInfo->SAMM = pVia->SAMM; graphicInfo->dwActiveDevice = pVia->ActiveDevice; /* Added to pass DRM info to V4L */ @@ -2504,9 +2498,6 @@ VIAWriteMode(ScrnInfoPtr pScrn, DisplayModePtr mode) pScrn->vtSema = TRUE; - pBIOSInfo->IsSecondary = pVia->IsSecondary; - pBIOSInfo->HasSecondary = pVia->HasSecondary; - { int i; @@ -2522,12 +2513,14 @@ VIAWriteMode(ScrnInfoPtr pScrn, DisplayModePtr mode) } /* FIXME - need DRI lock for this bit - see i810 */ - if (!pVia->IsSecondary) + if (!pVia->IsSecondary) { + if (pVia->FirstInit) + memset(pVia->FBBase, 0x00, pVia->videoRambytes); VIASetModeUseBIOSTable(pScrn, mode); - else + } else VIASetModeForMHS(pScrn, mode); - pBIOSInfo->FirstInit = FALSE; + pVia->FirstInit = FALSE; /* Enable the graphics engine. */ if (!pVia->NoAccel) @@ -2750,7 +2743,7 @@ static void VIADPMS(ScrnInfoPtr pScrn, int mode, int flags) dev = xf86CreateI2CDevRec(); dev->DevName = "TV"; dev->SlaveAddr = pBIOSInfo->TVI2CAdd; - dev->pI2CBus = pBIOSInfo->I2C_Port2; + dev->pI2CBus = pVia->I2C_Port2; if (xf86I2CDevInit(dev)) { switch (pBIOSInfo->TVEncoder) { case VIA_TV2PLUS: @@ -2761,8 +2754,8 @@ static void VIADPMS(ScrnInfoPtr pScrn, int mode, int flags) xf86I2CWriteRead(dev, W_Buffer,2, NULL,0); break; case VIA_VT1623: - VIAGPIOI2C_Initial(&(pBIOSInfo->GpioI2c), 0x40); - VIAGPIOI2C_Write(&(pBIOSInfo->GpioI2c), 0x0E, 0); + VIAGPIOI2C_Initial(&(pVia->GpioI2c), 0x40); + VIAGPIOI2C_Write(&(pVia->GpioI2c), 0x0E, 0); break; default: break; @@ -2784,7 +2777,7 @@ static void VIADPMS(ScrnInfoPtr pScrn, int mode, int flags) dev = xf86CreateI2CDevRec(); dev->DevName = "TV"; dev->SlaveAddr = pBIOSInfo->TVI2CAdd; - dev->pI2CBus = pBIOSInfo->I2C_Port2; + dev->pI2CBus = pVia->I2C_Port2; if (xf86I2CDevInit(dev)) { switch (pBIOSInfo->TVEncoder) { case VIA_TV2PLUS: @@ -2799,8 +2792,8 @@ static void VIADPMS(ScrnInfoPtr pScrn, int mode, int flags) xf86I2CWriteRead(dev, W_Buffer,2, NULL,0); break; case VIA_VT1623: - VIAGPIOI2C_Initial(&(pBIOSInfo->GpioI2c), 0x40); - VIAGPIOI2C_Write(&(pBIOSInfo->GpioI2c), 0x0E, 0x0F); + VIAGPIOI2C_Initial(&(pVia->GpioI2c), 0x40); + VIAGPIOI2C_Write(&(pVia->GpioI2c), 0x0E, 0x0F); break; default: break; @@ -2829,7 +2822,7 @@ Bool VIADeviceSelection(ScrnInfoPtr pScrn) VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; /*unsigned int i; unsigned char numDevice;*/ - pBIOSInfo->SAMM = FALSE; + pVia->SAMM = FALSE; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIADeviceSelection\n")); pBIOSInfo->DefaultActiveDevice = ViaVBEGetActiveDevice(pScrn); @@ -2847,7 +2840,7 @@ Bool VIADeviceSelection(ScrnInfoPtr pScrn) } if (((pBIOSInfo->ActiveDevice & pBIOSInfo->ConnectedDevice) == pBIOSInfo->ActiveDevice) && (pVia->IsSecondary)) { - pBIOSInfo->SAMM = TRUE; + pVia->SAMM = TRUE; } pBIOSInfo->ActiveDevice &= pBIOSInfo->ConnectedDevice; pVia->ActiveDevice = pBIOSInfo->ActiveDevice; @@ -2876,7 +2869,7 @@ Bool VIADeviceDispatch(ScrnInfoPtr pScrn) VIABIOSInfoPtr pBIOSInfo1 = pVia1->pBIOSInfo, pBIOSInfo0 = pVia0->pBIOSInfo; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIADeviceDispatch\n")); - pBIOSInfo0->SAMM = TRUE; + pVia0->SAMM = TRUE; switch (pBIOSInfo1->ActiveDevice) { case (VIA_DEVICE_CRT1 | VIA_DEVICE_LCD) : /* If CRT + LCD, CRT is IGA1 */ pBIOSInfo0->ActiveDevice = VIA_DEVICE_CRT1; diff --git a/src/via_driver.h b/src/via_driver.h index e99c027..ec74ab7 100644 --- a/src/via_driver.h +++ b/src/via_driver.h @@ -202,6 +202,7 @@ typedef struct _VIA { int Bpp, Bpl; unsigned PlaneMask; + Bool FirstInit; unsigned long videoRambytes; int videoRamKbytes; int FBFreeStart; @@ -222,18 +223,13 @@ typedef struct _VIA { unsigned char* MapBaseDense; unsigned char* FBBase; unsigned char* FBStart; - + CARD8 MemClk; + /* Private memory pool management */ int SWOVUsed[MEM_BLOCKS]; /* Free map for SWOV pool */ unsigned long SWOVPool; /* Base of SWOV pool */ unsigned long SWOVSize; /* Size of SWOV blocks */ - Bool PrimaryVidMapped; - int dacSpeedBpp; - int minClock, maxClock; - int MCLK, REFCLK, LCDclk; - double refclk_fact; - /* Here are all the Options */ Bool VQEnable; Bool pci_burst; @@ -287,10 +283,14 @@ typedef struct _VIA { I2CBusPtr pI2CBus3; /* the bus now accessed as gpioi2c */ xf86MonPtr DDC1; xf86MonPtr DDC2; + GpioI2cRec GpioI2c; /* should be weened off, but we have no info, + no hardware that this code is known to + work with (properly) */ /* MHS */ Bool IsSecondary; Bool HasSecondary; + Bool SAMM; /* Capture de-interlace Mode */ CARD32 Cap0_Deinterlace; diff --git a/src/via_i2c.c b/src/via_i2c.c index 9e308f3..fd265b0 100644 --- a/src/via_i2c.c +++ b/src/via_i2c.c @@ -676,6 +676,6 @@ VIAI2CInit(ScrnInfoPtr pScrn) pVia->I2C_Port1 = pVia->pI2CBus1; pVia->I2C_Port2 = pVia->pI2CBus2; - ViaGpioI2CInit(&(pVia->pBIOSInfo->GpioI2c), VGAHWPTR(pScrn), + ViaGpioI2CInit(&(pVia->GpioI2c), VGAHWPTR(pScrn), pVia->pI2CBus1->I2CUDelay); } diff --git a/src/via_mode.c b/src/via_mode.c index 1ae1ac5..526b371 100644 --- a/src/via_mode.c +++ b/src/via_mode.c @@ -78,20 +78,22 @@ struct { * 2 - VIA VT1622 * *=*/ -int -VIACheckTVExist(VIABIOSInfoPtr pBIOSInfo) +void +VIACheckTVExist(ScrnInfoPtr pScrn) { + VIAPtr pVia = VIAPTR(pScrn); + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; I2CDevPtr dev; CARD8 W_Buffer[1]; CARD8 R_Buffer[1]; - DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_INFO, "VIACheckTVExist\n")); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIACheckTVExist\n")); /* Check For TV2/TV3 */ - if (xf86I2CProbeAddress(pBIOSInfo->I2C_Port2, 0x40)) { + if (xf86I2CProbeAddress(pVia->I2C_Port2, 0x40)) { dev = xf86CreateI2CDevRec(); dev->DevName = "TV"; dev->SlaveAddr = 0x40; - dev->pI2CBus = pBIOSInfo->I2C_Port2; + dev->pI2CBus = pVia->I2C_Port2; if (xf86I2CDevInit(dev)) { W_Buffer[0] = 0x1B; @@ -99,19 +101,19 @@ VIACheckTVExist(VIABIOSInfoPtr pBIOSInfo) xf86DestroyI2CDevRec(dev,TRUE); switch (R_Buffer[0]) { case 2: - DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_PROBED, + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Found TVEncoder VT1621!\n")); pBIOSInfo->TVEncoder = VIA_TV2PLUS; pBIOSInfo->TVI2CAdd = 0x40; break; case 3: - DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_PROBED, + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Found TVEncoder VT1622!\n")); pBIOSInfo->TVEncoder = VIA_TV3; pBIOSInfo->TVI2CAdd = 0x40; break; case 16: - DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_PROBED, + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Found TVEncoder VT1622A!\n")); pBIOSInfo->TVEncoder = VIA_VT1622A; pBIOSInfo->TVI2CAdd = 0x40; @@ -128,22 +130,21 @@ VIACheckTVExist(VIABIOSInfoPtr pBIOSInfo) pBIOSInfo->TVEncoder = VIA_NONETV; if (pBIOSInfo->TVEncoder == VIA_NONETV) { - VIAGPIOI2C_Initial(&(pBIOSInfo->GpioI2c), 0x40); - if (VIAGPIOI2C_Read(&(pBIOSInfo->GpioI2c), 0x1B, R_Buffer, 1)) { + VIAGPIOI2C_Initial(&(pVia->GpioI2c), 0x40); + if (VIAGPIOI2C_Read(&(pVia->GpioI2c), 0x1B, R_Buffer, 1)) { switch (R_Buffer[0]) { case 16: - DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_PROBED, + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Found TVEncoder VT1623!\n")); pBIOSInfo->TVEncoder = VIA_VT1623; break; default: - DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_PROBED, + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Unknow TVEncoder Type:%d!\n", R_Buffer[0])); break; } } } - return pBIOSInfo->TVEncoder; } /*=* @@ -202,18 +203,19 @@ VIAGetActiveDisplay(ScrnInfoPtr pScrn) * 1 1 - None *=*/ static CARD8 -VIASensorTV2(VIABIOSInfoPtr pBIOSInfo) +VIASensorTV2(ScrnInfoPtr pScrn) { + VIAPtr pVia = VIAPTR(pScrn); I2CDevPtr dev; CARD8 save, tmp = 0x05; CARD8 W_Buffer[2]; CARD8 R_Buffer[1]; - DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_INFO, "VIASensorTV2\n")); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIASensorTV2\n")); dev = xf86CreateI2CDevRec(); dev->DevName = "VT1621"; dev->SlaveAddr = 0x40; - dev->pI2CBus = pBIOSInfo->I2C_Port2; + dev->pI2CBus = pVia->I2C_Port2; if (xf86I2CDevInit(dev)) { W_Buffer[0] = 0x0E; @@ -258,33 +260,35 @@ VIASensorTV2(VIABIOSInfoPtr pBIOSInfo) * - Others: S-Video *=*/ static CARD8 -VIASensorTV3(VIABIOSInfoPtr pBIOSInfo) +VIASensorTV3(ScrnInfoPtr pScrn) { + VIAPtr pVia = VIAPTR(pScrn); + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; I2CDevPtr dev; CARD8 save, tmp = 0; CARD8 W_Buffer[2]; CARD8 R_Buffer[1]; - DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_INFO, "VIASensorTV3\n")); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIASensorTV3\n")); if (pBIOSInfo->TVEncoder == VIA_VT1623) { - VIAGPIOI2C_Initial(&(pBIOSInfo->GpioI2c), 0x40); - VIAGPIOI2C_Read(&(pBIOSInfo->GpioI2c), 0x0E, R_Buffer, 1); + VIAGPIOI2C_Initial(&(pVia->GpioI2c), 0x40); + VIAGPIOI2C_Read(&(pVia->GpioI2c), 0x0E, R_Buffer, 1); save = R_Buffer[0]; W_Buffer[0] = 0; - VIAGPIOI2C_Write(&(pBIOSInfo->GpioI2c), 0x0E, W_Buffer[0]); + VIAGPIOI2C_Write(&(pVia->GpioI2c), 0x0E, W_Buffer[0]); W_Buffer[0] = 0x80; - VIAGPIOI2C_Write(&(pBIOSInfo->GpioI2c), 0x0E, W_Buffer[0]); + VIAGPIOI2C_Write(&(pVia->GpioI2c), 0x0E, W_Buffer[0]); W_Buffer[0] = 0; - VIAGPIOI2C_Write(&(pBIOSInfo->GpioI2c), 0x0E, W_Buffer[0]); - VIAGPIOI2C_Read(&(pBIOSInfo->GpioI2c), 0x0F, R_Buffer, 1); + VIAGPIOI2C_Write(&(pVia->GpioI2c), 0x0E, W_Buffer[0]); + VIAGPIOI2C_Read(&(pVia->GpioI2c), 0x0F, R_Buffer, 1); tmp = R_Buffer[0] & 0x0F; W_Buffer[0] = save; - VIAGPIOI2C_Write(&(pBIOSInfo->GpioI2c), 0x0E, W_Buffer[0]); + VIAGPIOI2C_Write(&(pVia->GpioI2c), 0x0E, W_Buffer[0]); } else { dev = xf86CreateI2CDevRec(); dev->DevName = "VT1622"; dev->SlaveAddr = 0x40; - dev->pI2CBus = pBIOSInfo->I2C_Port2; + dev->pI2CBus = pVia->I2C_Port2; if (xf86I2CDevInit(dev)) { W_Buffer[0] = 0x0E; @@ -333,7 +337,8 @@ static Bool VIASensorDVI(ScrnInfoPtr pScrn) { vgaHWPtr hwp = VGAHWPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; + VIAPtr pVia = VIAPTR(pScrn); + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; CARD8 SlaveAddr, cr6c, cr93; Bool ret = FALSE; I2CDevPtr dev; @@ -348,7 +353,7 @@ VIASensorDVI(ScrnInfoPtr pScrn) cr93 = hwp->readCrtc(hwp, 0x93); /* check for CLE266 first!!! */ - if (CLE266_REV_IS_CX(pBIOSInfo->ChipRev)) + if (CLE266_REV_IS_CX(pVia->ChipRev)) hwp->writeCrtc(hwp, 0x93, 0xA3); else hwp->writeCrtc(hwp, 0x93, 0xBF); @@ -368,11 +373,11 @@ VIASensorDVI(ScrnInfoPtr pScrn) break; } - if (xf86I2CProbeAddress(pBIOSInfo->I2C_Port2, SlaveAddr)) { + if (xf86I2CProbeAddress(pVia->I2C_Port2, SlaveAddr)) { dev = xf86CreateI2CDevRec(); dev->DevName = "TMDS"; dev->SlaveAddr = SlaveAddr; - dev->pI2CBus = pBIOSInfo->I2C_Port2; + dev->pI2CBus = pVia->I2C_Port2; if (xf86I2CDevInit(dev)) { W_Buffer[0] = 0x09; @@ -385,9 +390,9 @@ VIASensorDVI(ScrnInfoPtr pScrn) xf86DestroyI2CDevRec(dev,TRUE); } - if (pBIOSInfo->Chipset != VIA_CLE266) { - VIAGPIOI2C_Initial(&(pBIOSInfo->GpioI2c), SlaveAddr); - VIAGPIOI2C_Read(&(pBIOSInfo->GpioI2c), 0x09, R_Buffer, 1); + if (pVia->Chipset != VIA_CLE266) { + VIAGPIOI2C_Initial(&(pVia->GpioI2c), SlaveAddr); + VIAGPIOI2C_Read(&(pVia->GpioI2c), 0x09, R_Buffer, 1); if (R_Buffer[0] & 0x04) ret = TRUE; } @@ -406,7 +411,8 @@ Bool VIAPostDVI(ScrnInfoPtr pScrn) { vgaHWPtr hwp = VGAHWPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; + VIAPtr pVia = VIAPTR(pScrn); + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; CARD8 cr6c, cr93; Bool ret = FALSE; I2CDevPtr dev; @@ -421,7 +427,7 @@ VIAPostDVI(ScrnInfoPtr pScrn) cr93 = hwp->readCrtc(hwp, 0x93); /* check for CLE266 first!!! */ - if (CLE266_REV_IS_CX(pBIOSInfo->ChipRev)) + if (CLE266_REV_IS_CX(pVia->ChipRev)) hwp->writeCrtc(hwp, 0x93, 0xA3); else hwp->writeCrtc(hwp, 0x93, 0xBF); @@ -429,11 +435,11 @@ VIAPostDVI(ScrnInfoPtr pScrn) /* Enable LCD */ VIAEnableLCD(pScrn); - if (xf86I2CProbeAddress(pBIOSInfo->I2C_Port2, 0x70)) { + if (xf86I2CProbeAddress(pVia->I2C_Port2, 0x70)) { dev = xf86CreateI2CDevRec(); dev->DevName = "TMDS"; dev->SlaveAddr = 0x70; - dev->pI2CBus = pBIOSInfo->I2C_Port2; + dev->pI2CBus = pVia->I2C_Port2; if (xf86I2CDevInit(dev)) { W_Buffer[0] = 0x00; xf86I2CWriteRead(dev, W_Buffer,1, R_Buffer,4); @@ -497,11 +503,11 @@ VIAPostDVI(ScrnInfoPtr pScrn) /* Check VT3192 TMDS Exist or not?*/ if (!pBIOSInfo->TMDS) { - if (xf86I2CProbeAddress(pBIOSInfo->I2C_Port2, 0x10)) { + if (xf86I2CProbeAddress(pVia->I2C_Port2, 0x10)) { dev = xf86CreateI2CDevRec(); dev->DevName = "TMDS"; dev->SlaveAddr = 0x10; - dev->pI2CBus = pBIOSInfo->I2C_Port2; + dev->pI2CBus = pVia->I2C_Port2; if (xf86I2CDevInit(dev)) { W_Buffer[0] = 0x00; xf86I2CWriteRead(dev, W_Buffer,1, R_Buffer,4); @@ -544,58 +550,58 @@ VIAPostDVI(ScrnInfoPtr pScrn) } /* GPIO Sense */ - if (pBIOSInfo->Chipset != VIA_CLE266) { - VIAGPIOI2C_Initial(&(pBIOSInfo->GpioI2c), 0x70); - if (VIAGPIOI2C_Read(&(pBIOSInfo->GpioI2c), 0, R_Buffer, 2)) { + if (pVia->Chipset != VIA_CLE266) { + VIAGPIOI2C_Initial(&(pVia->GpioI2c), 0x70); + if (VIAGPIOI2C_Read(&(pVia->GpioI2c), 0, R_Buffer, 2)) { if (R_Buffer[0] == 0x06 && R_Buffer[1] == 0x11) { /* VIA LVDS */ - VIAGPIOI2C_Read(&(pBIOSInfo->GpioI2c), 2, R_Buffer, 2); + VIAGPIOI2C_Read(&(pVia->GpioI2c), 2, R_Buffer, 2); if (R_Buffer[0] == 0x91 && R_Buffer[1] == 0x31) { DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Found LVDS Transmiter VT1631.\n")); pBIOSInfo->LVDS = VIA_VT3191; if (pBIOSInfo->BusWidth == VIA_DI_24BIT && pBIOSInfo->LCDDualEdge) - VIAGPIOI2C_Write(&(pBIOSInfo->GpioI2c), 0x08, 0x0D); + VIAGPIOI2C_Write(&(pVia->GpioI2c), 0x08, 0x0D); else - VIAGPIOI2C_Write(&(pBIOSInfo->GpioI2c), 0x08, 0x09); + VIAGPIOI2C_Write(&(pVia->GpioI2c), 0x08, 0x09); ret = TRUE; } } else if (R_Buffer[0] == 0x01 && R_Buffer[1] == 0x0) {/* Silicon TMDS */ - VIAGPIOI2C_Read(&(pBIOSInfo->GpioI2c), 2, R_Buffer, 2); + VIAGPIOI2C_Read(&(pVia->GpioI2c), 2, R_Buffer, 2); if (R_Buffer[0] && R_Buffer[1]) { DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Found TMDS Transmiter Silicon164.\n")); pBIOSInfo->TMDS = VIA_SIL164; if (pBIOSInfo->BusWidth == VIA_DI_24BIT) { if (pBIOSInfo->LCDDualEdge) - VIAGPIOI2C_Write(&(pBIOSInfo->GpioI2c), 0x08, 0x3F); + VIAGPIOI2C_Write(&(pVia->GpioI2c), 0x08, 0x3F); else - VIAGPIOI2C_Write(&(pBIOSInfo->GpioI2c), 0x08, 0x37); + VIAGPIOI2C_Write(&(pVia->GpioI2c), 0x08, 0x37); } else { - VIAGPIOI2C_Write(&(pBIOSInfo->GpioI2c), 0x08, 0x3B); + VIAGPIOI2C_Write(&(pVia->GpioI2c), 0x08, 0x3B); } - VIAGPIOI2C_Write(&(pBIOSInfo->GpioI2c), 0x0C, 0x09); + VIAGPIOI2C_Write(&(pVia->GpioI2c), 0x0C, 0x09); ret = TRUE; } } } - VIAGPIOI2C_Initial(&(pBIOSInfo->GpioI2c), 0x10); - if (VIAGPIOI2C_Read(&(pBIOSInfo->GpioI2c), 0, R_Buffer, 2)) { + VIAGPIOI2C_Initial(&(pVia->GpioI2c), 0x10); + if (VIAGPIOI2C_Read(&(pVia->GpioI2c), 0, R_Buffer, 2)) { if (R_Buffer[0] == 0x06 && R_Buffer[1] == 0x11) { /* VIA TMDS */ - VIAGPIOI2C_Read(&(pBIOSInfo->GpioI2c), 2, R_Buffer, 2); + VIAGPIOI2C_Read(&(pVia->GpioI2c), 2, R_Buffer, 2); if (R_Buffer[0] == 0x92 && R_Buffer[1] == 0x31) { DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Found TMDS Transmiter VT1632.\n")); pBIOSInfo->TMDS = VIA_VT3192; if (pBIOSInfo->BusWidth == VIA_DI_24BIT) { if (pBIOSInfo->LCDDualEdge) - VIAGPIOI2C_Write(&(pBIOSInfo->GpioI2c), 0x08, 0x3F); + VIAGPIOI2C_Write(&(pVia->GpioI2c), 0x08, 0x3F); else - VIAGPIOI2C_Write(&(pBIOSInfo->GpioI2c), 0x08, 0x37); + VIAGPIOI2C_Write(&(pVia->GpioI2c), 0x08, 0x37); } else { - VIAGPIOI2C_Write(&(pBIOSInfo->GpioI2c), 0x08, 0x3B); + VIAGPIOI2C_Write(&(pVia->GpioI2c), 0x08, 0x3B); } ret = TRUE; } @@ -645,7 +651,8 @@ VIAPostDVI(ScrnInfoPtr pScrn) CARD8 VIAGetDeviceDetect(ScrnInfoPtr pScrn) { - VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; + VIAPtr pVia = VIAPTR(pScrn); + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; CARD8 tmp, sense; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAGetDeviceDetect\n")); @@ -667,7 +674,7 @@ VIAGetDeviceDetect(ScrnInfoPtr pScrn) pBIOSInfo->TVAttach = FALSE; break; case VIA_TV2PLUS: - sense = VIASensorTV2(pBIOSInfo); + sense = VIASensorTV2(pScrn); if (sense == 0x05) { pBIOSInfo->TVAttach = FALSE; /* No TV Output Attached */ } @@ -694,7 +701,7 @@ VIAGetDeviceDetect(ScrnInfoPtr pScrn) case VIA_TV3: case VIA_VT1622A: case VIA_VT1623: - sense = VIASensorTV3(pBIOSInfo); + sense = VIASensorTV3(pScrn); if (sense == 0x0F) { pBIOSInfo->TVAttach = FALSE; /* No TV Output Attached */ } @@ -732,7 +739,7 @@ VIAGetDeviceDetect(ScrnInfoPtr pScrn) } } - if ((pBIOSInfo->Chipset == VIA_KM400) && !(tmp & VIA_DEVICE_LCD)) { + if ((pVia->Chipset == VIA_KM400) && !(tmp & VIA_DEVICE_LCD)) { /* there currently is no infrastructure to check if another device is already using this i2cbus, this will be solved later when the whole i2c output detection is reworked. @@ -742,8 +749,8 @@ VIAGetDeviceDetect(ScrnInfoPtr pScrn) will respond to DDC/EDID address probe (at least on I2CScans i have seen from acer aspires) */ - if (xf86I2CProbeAddress(pBIOSInfo->I2C_Port2, 0xA0) || - xf86I2CProbeAddress(pBIOSInfo->I2C_Port2, 0xA2)) { + if (xf86I2CProbeAddress(pVia->I2C_Port2, 0xA0) || + xf86I2CProbeAddress(pVia->I2C_Port2, 0xA2)) { tmp |= VIA_DEVICE_LCD; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "DDC/EDID response on I2C_Port2 on km400/kn400: assume hardwired panel.\n")); } @@ -772,16 +779,14 @@ VIAGetDeviceDetect(ScrnInfoPtr pScrn) * 2 - Found EDID2 Table *=*/ static int -VIAQueryDVIEDID(VIABIOSInfoPtr pBIOSInfo) +VIAQueryDVIEDID(ScrnInfoPtr pScrn, I2CDevPtr dev) { - I2CDevPtr dev; + VIAPtr pVia = VIAPTR(pScrn); CARD8 W_Buffer[1]; CARD8 R_Buffer[2]; - DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_INFO, "VIAQueryDVIEDID\n")); - if (xf86I2CProbeAddress(pBIOSInfo->I2C_Port2, 0xA0)) { - pBIOSInfo->dev = xf86CreateI2CDevRec(); - dev = pBIOSInfo->dev; + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAQueryDVIEDID\n")); + if (xf86I2CProbeAddress(pVia->I2C_Port2, 0xA0)) { dev->DevName = "EDID1"; dev->SlaveAddr = 0xA0; dev->ByteTimeout = 2200; /* VESA DDC spec 3 p. 43 (+10 %) */ @@ -789,7 +794,7 @@ VIAQueryDVIEDID(VIABIOSInfoPtr pBIOSInfo) dev->BitTimeout = 40; dev->ByteTimeout = 40; dev->AcknTimeout = 40; - dev->pI2CBus = pBIOSInfo->I2C_Port2; + dev->pI2CBus = pVia->I2C_Port2; if (xf86I2CDevInit(dev)) { W_Buffer[0] = 0; @@ -797,16 +802,14 @@ VIAQueryDVIEDID(VIABIOSInfoPtr pBIOSInfo) if ((R_Buffer[0] == 0) && (R_Buffer[1] == 0xFF)) return 1; /* Found EDID1 Table */ else - xf86DestroyI2CDevRec(dev,TRUE); + xf86DestroyI2CDevRec(dev,FALSE); } else { - xf86DestroyI2CDevRec(dev,TRUE); + xf86DestroyI2CDevRec(dev,FALSE); } } - if (xf86I2CProbeAddress(pBIOSInfo->I2C_Port2, 0xA2)) { - pBIOSInfo->dev = xf86CreateI2CDevRec(); - dev = pBIOSInfo->dev; + if (xf86I2CProbeAddress(pVia->I2C_Port2, 0xA2)) { dev->DevName = "EDID2"; dev->SlaveAddr = 0xA2; dev->ByteTimeout = 2200; /* VESA DDC spec 3 p. 43 (+10 %) */ @@ -814,7 +817,7 @@ VIAQueryDVIEDID(VIABIOSInfoPtr pBIOSInfo) dev->BitTimeout = 40; dev->ByteTimeout = 40; dev->AcknTimeout = 40; - dev->pI2CBus = pBIOSInfo->I2C_Port2; + dev->pI2CBus = pVia->I2C_Port2; if (xf86I2CDevInit(dev)) { W_Buffer[0] = 0; @@ -822,27 +825,27 @@ VIAQueryDVIEDID(VIABIOSInfoPtr pBIOSInfo) if (R_Buffer[0] == 0x20) return 2; /* Found EDID2 Table */ else { - xf86DestroyI2CDevRec(dev,TRUE); + xf86DestroyI2CDevRec(dev,FALSE); return 0; /* Found No EDID Table */ } } else { - xf86DestroyI2CDevRec(dev,TRUE); + xf86DestroyI2CDevRec(dev,FALSE); return 0; /* Found No EDID Table */ } } - if (pBIOSInfo->Chipset != VIA_CLE266) { - VIAGPIOI2C_Initial(&(pBIOSInfo->GpioI2c), 0xA0); - VIAGPIOI2C_Read(&(pBIOSInfo->GpioI2c), 0, R_Buffer, 2); - DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_INFO, "R_Buffer[0]=%d\n", R_Buffer[0])); - DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_INFO, "R_Buffer[1]=%d\n", R_Buffer[1])); + if (pVia->Chipset != VIA_CLE266) { + VIAGPIOI2C_Initial(&(pVia->GpioI2c), 0xA0); + VIAGPIOI2C_Read(&(pVia->GpioI2c), 0, R_Buffer, 2); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "R_Buffer[0]=%d\n", R_Buffer[0])); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "R_Buffer[1]=%d\n", R_Buffer[1])); if ((R_Buffer[0] == 0) && (R_Buffer[1] == 0xFF)) return 1; /* Found EDID1 Table */ else { - VIAGPIOI2C_Initial(&(pBIOSInfo->GpioI2c), 0xA2); - VIAGPIOI2C_Read(&(pBIOSInfo->GpioI2c), 0, R_Buffer, 1); - DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_INFO, "R_Buffer[0]=%d\n", R_Buffer[0])); + VIAGPIOI2C_Initial(&(pVia->GpioI2c), 0xA2); + VIAGPIOI2C_Read(&(pVia->GpioI2c), 0, R_Buffer, 1); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "R_Buffer[0]=%d\n", R_Buffer[0])); if (R_Buffer[0] == 0x20) return 2; /* Found EDID2 Table */ else @@ -878,9 +881,9 @@ VIAQueryDVIEDID(VIABIOSInfoPtr pBIOSInfo) * 0xFF - Not Supported Panel Size *=*/ static CARD8 -VIAGetPanelSizeFromDDCv1(ScrnInfoPtr pScrn) +VIAGetPanelSizeFromDDCv1(ScrnInfoPtr pScrn, I2CDevPtr dev) { - VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; + VIAPtr pVia = VIAPTR(pScrn); xf86MonPtr pMon; int i, max = 0; CARD8 W_Buffer[1]; @@ -892,12 +895,12 @@ VIAGetPanelSizeFromDDCv1(ScrnInfoPtr pScrn) for (i = 0x23; i < 0x35; i++) { switch (i) { case 0x23: - if (pBIOSInfo->Chipset == VIA_CLE266) { + if (pVia->Chipset == VIA_CLE266) { W_Buffer[0] = i; - xf86I2CWriteRead(pBIOSInfo->dev, W_Buffer,1, R_Buffer,1); + xf86I2CWriteRead(dev, W_Buffer,1, R_Buffer,1); } else { - VIAGPIOI2C_Read(&(pBIOSInfo->GpioI2c), i, R_Buffer, 1); + VIAGPIOI2C_Read(&(pVia->GpioI2c), i, R_Buffer, 1); } if (R_Buffer[0] & 0x3C) max = 640; @@ -907,12 +910,12 @@ VIAGetPanelSizeFromDDCv1(ScrnInfoPtr pScrn) max = 800; break; case 0x24: - if (pBIOSInfo->Chipset == VIA_CLE266) { + if (pVia->Chipset == VIA_CLE266) { W_Buffer[0] = i; - xf86I2CWriteRead(pBIOSInfo->dev, W_Buffer,1, R_Buffer,1); + xf86I2CWriteRead(dev, W_Buffer,1, R_Buffer,1); } else { - VIAGPIOI2C_Read(&(pBIOSInfo->GpioI2c), i, R_Buffer, 1); + VIAGPIOI2C_Read(&(pVia->GpioI2c), i, R_Buffer, 1); } if (R_Buffer[0] & 0xC0) max = 800; @@ -929,12 +932,12 @@ VIAGetPanelSizeFromDDCv1(ScrnInfoPtr pScrn) case 0x30: case 0x32: case 0x34: - if (pBIOSInfo->Chipset == VIA_CLE266) { + if (pVia->Chipset == VIA_CLE266) { W_Buffer[0] = i; - xf86I2CWriteRead(pBIOSInfo->dev, W_Buffer,1, R_Buffer,1); + xf86I2CWriteRead(dev, W_Buffer,1, R_Buffer,1); } else { - VIAGPIOI2C_Read(&(pBIOSInfo->GpioI2c), i, R_Buffer, 1); + VIAGPIOI2C_Read(&(pVia->GpioI2c), i, R_Buffer, 1); } if (R_Buffer[0] == 1) break; @@ -948,12 +951,12 @@ VIAGetPanelSizeFromDDCv1(ScrnInfoPtr pScrn) } } - if (pBIOSInfo->Chipset == VIA_CLE266) { - xf86DestroyI2CDevRec(pBIOSInfo->dev,TRUE); + if (pVia->Chipset == VIA_CLE266) { + xf86DestroyI2CDevRec(dev,TRUE); - pMon = xf86DoEDID_DDC2(pScrn->scrnIndex, pBIOSInfo->I2C_Port2); + pMon = xf86DoEDID_DDC2(pScrn->scrnIndex, pVia->I2C_Port2); if (pMon) { - pBIOSInfo->DDC2 = pMon; + pVia->DDC2 = pMon; xf86PrintEDID(pMon); xf86SetDDCproperties(pScrn, pMon); for (i = 0; i < 8; i++) { @@ -961,8 +964,8 @@ VIAGetPanelSizeFromDDCv1(ScrnInfoPtr pScrn) max = pMon->timings2[i].hsize; } } - if (pBIOSInfo->DDC1) { - xf86SetDDCproperties(pScrn, pBIOSInfo->DDC1); + if (pVia->DDC1) { + xf86SetDDCproperties(pScrn, pVia->DDC1); } } } @@ -995,20 +998,21 @@ VIAGetPanelSizeFromDDCv1(ScrnInfoPtr pScrn) * 0xFF - Not Supported Panel Size *=*/ static CARD8 -VIAGetPanelSizeFromDDCv2(VIABIOSInfoPtr pBIOSInfo) +VIAGetPanelSizeFromDDCv2(ScrnInfoPtr pScrn, I2CDevPtr dev) { + VIAPtr pVia = VIAPTR(pScrn); int data = 0; CARD8 W_Buffer[1]; CARD8 R_Buffer[2]; - DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_INFO, "VIAGetPanelSizeFromDDCv2\n")); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAGetPanelSizeFromDDCv2\n")); - if (pBIOSInfo->Chipset == VIA_CLE266) { + if (pVia->Chipset == VIA_CLE266) { W_Buffer[0] = 0x76; - xf86I2CWriteRead(pBIOSInfo->dev, W_Buffer,1, R_Buffer,2); - xf86DestroyI2CDevRec(pBIOSInfo->dev,TRUE); + xf86I2CWriteRead(dev, W_Buffer,1, R_Buffer,2); + xf86DestroyI2CDevRec(dev,TRUE); } else - VIAGPIOI2C_Read(&(pBIOSInfo->GpioI2c), 0x76, R_Buffer, 2); + VIAGPIOI2C_Read(&(pVia->GpioI2c), 0x76, R_Buffer, 2); data = R_Buffer[0]; data |= R_Buffer[1] << 8; @@ -1043,7 +1047,8 @@ void VIAGetPanelInfo(ScrnInfoPtr pScrn) { vgaHWPtr hwp = VGAHWPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; + VIAPtr pVia = VIAPTR(pScrn); + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; CARD8 cr6c, cr93; int size; @@ -1057,25 +1062,33 @@ VIAGetPanelInfo(ScrnInfoPtr pScrn) cr93 = hwp->readCrtc(hwp, 0x93); /* check for CLE266 first!!! */ - if (CLE266_REV_IS_CX(pBIOSInfo->ChipRev)) + if (CLE266_REV_IS_CX(pVia->ChipRev)) hwp->writeCrtc(hwp, 0x93, 0xA3); else hwp->writeCrtc(hwp, 0x93, 0xBF); /* Enable LCD */ VIAEnableLCD(pScrn); + + { + I2CDevPtr dev = xf86CreateI2CDevRec(); - switch (VIAQueryDVIEDID(pBIOSInfo)) { + if (!dev) + return; + + switch (VIAQueryDVIEDID(pScrn, dev)) { case 1: - size = VIAGetPanelSizeFromDDCv1(pScrn); + size = VIAGetPanelSizeFromDDCv1(pScrn, dev); break; case 2: - size = VIAGetPanelSizeFromDDCv2(pBIOSInfo); + size = VIAGetPanelSizeFromDDCv2(pScrn, dev); break; default: size = 0; break; - } + } + xf86DestroyI2CDevRec(dev,TRUE); + } switch (size) { case 640: @@ -1255,7 +1268,8 @@ ViaGetNearestRefresh(ScrnInfoPtr pScrn, DisplayModePtr mode) static Bool ViaRefreshAllowed(ScrnInfoPtr pScrn) { - VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; + VIAPtr pVia = VIAPTR(pScrn); + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; int bppIndex; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaRefreshAllowed\n")); @@ -1276,7 +1290,7 @@ ViaRefreshAllowed(ScrnInfoPtr pScrn) bppIndex = 0; } - switch (pBIOSInfo->MemClk) { + switch (pVia->MemClk) { case VIA_MEM_SDR133: if (SDR133[bppIndex][pBIOSInfo->ResolutionIndex][pBIOSInfo->RefreshIndex]) return TRUE; @@ -1346,15 +1360,11 @@ ViaTVGetIndex(VIABIOSInfoPtr pBIOSInfo) Bool VIAFindModeUseBIOSTable(ScrnInfoPtr pScrn, DisplayModePtr mode) { - vgaHWPtr hwp = VGAHWPTR(pScrn); VIAPtr pVia = VIAPTR(pScrn); VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAFindModeUseBIOSTable\n")); - /* determine support highest resolution by Memory clk */ - pBIOSInfo->MemClk = hwp->readCrtc(hwp, 0x3D) >> 4; - if (!ViaGetModeIndex(pScrn, mode) || !ViaGetResolutionIndex(pScrn, mode)) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Mode not supported.\n"); return FALSE; @@ -1458,7 +1468,8 @@ static void VIASetLCDMode(ScrnInfoPtr pScrn, DisplayModePtr mode) { vgaHWPtr hwp = VGAHWPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; + VIAPtr pVia = VIAPTR(pScrn); + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; VIAModeTablePtr pViaModeTable = pBIOSInfo->pModeTable; VIALCDModePtr LCDTable; CARD8 modeNum = 0; @@ -1478,11 +1489,11 @@ VIASetLCDMode(ScrnInfoPtr pScrn, DisplayModePtr mode) /* Set LCD InitTb Regs */ if (pBIOSInfo->BusWidth == VIA_DI_12BIT) { - if (!pBIOSInfo->IsSecondary) + if (!pVia->IsSecondary) VIASetPrimaryClock(hwp, LCDTable->InitTb.VClk_12Bit); VIASetSecondaryClock(hwp, LCDTable->InitTb.LCDClk_12Bit); } else { - if (!pBIOSInfo->IsSecondary) + if (!pVia->IsSecondary) VIASetPrimaryClock(hwp, LCDTable->InitTb.VClk); VIASetSecondaryClock(hwp, LCDTable->InitTb.LCDClk); } @@ -1561,11 +1572,11 @@ VIASetLCDMode(ScrnInfoPtr pScrn, DisplayModePtr mode) } if (pBIOSInfo->BusWidth == VIA_DI_12BIT) { - if (!pBIOSInfo->IsSecondary) + if (!pVia->IsSecondary) VIASetPrimaryClock(hwp, Main->VClk_12Bit); VIASetSecondaryClock(hwp, Main->LCDClk_12Bit); } else { - if (!pBIOSInfo->IsSecondary) + if (!pVia->IsSecondary) VIASetPrimaryClock(hwp, Main->VClk); VIASetSecondaryClock(hwp, Main->LCDClk); } @@ -1590,11 +1601,11 @@ VIASetLCDMode(ScrnInfoPtr pScrn, DisplayModePtr mode) } if (pBIOSInfo->BusWidth == VIA_DI_12BIT) { - if (!pBIOSInfo->IsSecondary) + if (!pVia->IsSecondary) VIASetPrimaryClock(hwp, Patch2->VClk_12Bit); VIASetSecondaryClock(hwp, Patch2->LCDClk_12Bit); } else { - if (!pBIOSInfo->IsSecondary) + if (!pVia->IsSecondary) VIASetPrimaryClock (hwp, Patch2->VClk); VIASetSecondaryClock(hwp, Patch2->LCDClk); } @@ -1604,7 +1615,7 @@ VIASetLCDMode(ScrnInfoPtr pScrn, DisplayModePtr mode) /* Set LCD Secondary Mode Patch registers. */ - if (pBIOSInfo->IsSecondary) { + if (pVia->IsSecondary) { for (i = 0; i < LCDTable->numMPatchDP1Ctr; i++, Patch1++) { if (Patch1->Mode == modeNum) { for (j = 0; j < Patch1->numEntry; j++) { @@ -1624,7 +1635,7 @@ VIASetLCDMode(ScrnInfoPtr pScrn, DisplayModePtr mode) hwp->writeCrtc(hwp, 0x02, misc); /* Enable LCD */ - if (!pBIOSInfo->IsSecondary) { + if (!pVia->IsSecondary) { /* CRT Display Source Bit 6 - 0: CRT, 1: LCD */ ViaSeqChange(hwp, 0x16, 0x40, 0x40); @@ -1632,8 +1643,8 @@ VIASetLCDMode(ScrnInfoPtr pScrn, DisplayModePtr mode) if (pBIOSInfo->BusWidth == VIA_DI_12BIT) { hwp->writeCrtc(hwp, 0x6B, 0xA8); - if ((pBIOSInfo->Chipset == VIA_CLE266) && - CLE266_REV_IS_AX(pBIOSInfo->ChipRev)) + if ((pVia->Chipset == VIA_CLE266) && + CLE266_REV_IS_AX(pVia->ChipRev)) hwp->writeCrtc(hwp, 0x93, 0xB1); else hwp->writeCrtc(hwp, 0x93, 0xAF); @@ -1649,8 +1660,8 @@ VIASetLCDMode(ScrnInfoPtr pScrn, DisplayModePtr mode) /* Enable SAMM */ if (pBIOSInfo->BusWidth == VIA_DI_12BIT) { ViaCrtcChange(hwp, 0x6B, 0x20, 0x20); - if ((pBIOSInfo->Chipset == VIA_CLE266) && - CLE266_REV_IS_AX(pBIOSInfo->ChipRev)) + if ((pVia->Chipset == VIA_CLE266) && + CLE266_REV_IS_AX(pVia->ChipRev)) hwp->writeCrtc(hwp, 0x93, 0xB1); else hwp->writeCrtc(hwp, 0x93, 0xAF); @@ -1663,8 +1674,9 @@ VIASetLCDMode(ScrnInfoPtr pScrn, DisplayModePtr mode) } static void -VIAPreSetTV2Mode(VIABIOSInfoPtr pBIOSInfo) +VIAPreSetTV2Mode(VIAPtr pVia) { + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; VIABIOSTV2TablePtr Table; VIABIOSTVMASKTablePtr Mask; CARD8 *TV; @@ -1700,7 +1712,7 @@ VIAPreSetTV2Mode(VIABIOSInfoPtr pBIOSInfo) dev = xf86CreateI2CDevRec(); dev->DevName = "VT1621"; dev->SlaveAddr = 0x40; - dev->pI2CBus = pBIOSInfo->I2C_Port2; + dev->pI2CBus = pVia->I2C_Port2; xf86I2CDevInit(dev); @@ -1736,7 +1748,7 @@ VIAPreSetTV2Mode(VIABIOSInfoPtr pBIOSInfo) } } - if (pBIOSInfo->IsSecondary) { /* Patch as setting 2nd path */ + if (pVia->IsSecondary) { /* Patch as setting 2nd path */ int numPatch = (int)(Mask->misc2 >> 5); for (i = 0; i < numPatch; i++) { @@ -1750,8 +1762,9 @@ VIAPreSetTV2Mode(VIABIOSInfoPtr pBIOSInfo) } static void -VIAPreSetVT1623Mode(VIABIOSInfoPtr pBIOSInfo) +VIAPreSetVT1623Mode(VIAPtr pVia) { + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; VIABIOSTV3TablePtr Table; VIABIOSTVMASKTablePtr Mask; CARD8 *TV; @@ -1759,7 +1772,7 @@ VIAPreSetVT1623Mode(VIABIOSInfoPtr pBIOSInfo) int i, j; CARD8 W_Buffer[2]; CARD8 R_Buffer[1]; - GpioI2cPtr pDev = &(pBIOSInfo->GpioI2c); + GpioI2cPtr pDev = &(pVia->GpioI2c); DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_INFO, "VIAPreSetVT1623Mode\n")); @@ -1831,7 +1844,7 @@ VIAPreSetVT1623Mode(VIABIOSInfoPtr pBIOSInfo) } - if (pBIOSInfo->IsSecondary) { /* Patch as setting 2nd path */ + if (pVia->IsSecondary) { /* Patch as setting 2nd path */ int numPatch = (int)(Mask->misc2 >> 5); for (i = 0; i < numPatch; i++) { @@ -1846,7 +1859,8 @@ static void VIAPostSetTV2Mode(ScrnInfoPtr pScrn) { vgaHWPtr hwp = VGAHWPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; + VIAPtr pVia = VIAPTR(pScrn); + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; VIABIOSTV2TablePtr Table; VIABIOSTVMASKTablePtr Mask; CARD8 *CRTC, *Misc; @@ -1860,7 +1874,7 @@ VIAPostSetTV2Mode(ScrnInfoPtr pScrn) Table = &(pBIOSInfo->pModeTable->tv2Table[pBIOSInfo->TVIndex]); Mask = &(pBIOSInfo->pModeTable->tv2MaskTable); - if (pBIOSInfo->IsSecondary) { + if (pVia->IsSecondary) { if (pBIOSInfo->TVType == TVTYPE_PAL) { switch (pScrn->bitsPerPixel) { case 16: @@ -1910,7 +1924,7 @@ VIAPostSetTV2Mode(ScrnInfoPtr pScrn) ViaCrtcChange(hwp, 0x6C, 0x01, 0x01); /* Disable LCD Scaling */ - if (!pBIOSInfo->SAMM || pBIOSInfo->FirstInit) + if (!pVia->SAMM || pVia->FirstInit) hwp->writeCrtc(hwp, 0x79, 0x00); } else { @@ -1942,8 +1956,9 @@ VIAPostSetTV2Mode(ScrnInfoPtr pScrn) } static void -VIAPreSetTV3Mode(VIABIOSInfoPtr pBIOSInfo) +VIAPreSetTV3Mode(VIAPtr pVia) { + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; VIABIOSTV3TablePtr Table; VIABIOSTVMASKTablePtr Mask; CARD8 *TV; @@ -1985,7 +2000,7 @@ VIAPreSetTV3Mode(VIABIOSInfoPtr pBIOSInfo) dev = xf86CreateI2CDevRec(); dev->DevName = "VT1622"; dev->SlaveAddr = 0x40; - dev->pI2CBus = pBIOSInfo->I2C_Port2; + dev->pI2CBus = pVia->I2C_Port2; xf86I2CDevInit(dev); @@ -2043,7 +2058,7 @@ VIAPreSetTV3Mode(VIABIOSInfoPtr pBIOSInfo) } } - if (pBIOSInfo->IsSecondary) { /* Patch as setting 2nd path */ + if (pVia->IsSecondary) { /* Patch as setting 2nd path */ int numPatch = (int)(Mask->misc2 >> 5); for (i = 0; i < numPatch; i++) { @@ -2060,7 +2075,8 @@ static void VIAPostSetTV3Mode(ScrnInfoPtr pScrn) { vgaHWPtr hwp = VGAHWPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; + VIAPtr pVia = VIAPTR(pScrn); + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; VIABIOSTV3TablePtr Table; VIABIOSTVMASKTablePtr Mask; CARD8 *CRTC, *Misc; @@ -2082,7 +2098,7 @@ VIAPostSetTV3Mode(ScrnInfoPtr pScrn) Mask = &(pBIOSInfo->pModeTable->vt1622aMaskTable); } - if (pBIOSInfo->IsSecondary) { + if (pVia->IsSecondary) { if (pBIOSInfo->TVType == TVTYPE_PAL) { switch (pScrn->bitsPerPixel) { case 16: @@ -2124,12 +2140,12 @@ VIAPostSetTV3Mode(ScrnInfoPtr pScrn) if (Mask->misc2 & 0x18) { /* CLE266Ax use 2x XCLK */ - if ((pBIOSInfo->Chipset == VIA_CLE266) && - CLE266_REV_IS_AX(pBIOSInfo->ChipRev)) { + if ((pVia->Chipset == VIA_CLE266) && + CLE266_REV_IS_AX(pVia->ChipRev)) { ViaCrtcChange(hwp, 0x6B, 0x20, 0x20); /* Fix TV clock Polarity for CLE266A2 */ - if (pBIOSInfo->ChipRev == 0x02) + if (pVia->ChipRev == 0x02) ViaCrtcChange(hwp, 0x6C, 0x1C, 0x1C); VIASetSecondaryClock(hwp, 0x471C); @@ -2144,7 +2160,7 @@ VIAPostSetTV3Mode(ScrnInfoPtr pScrn) ViaCrtcChange(hwp, 0x6C, 0x01, 0x01); /* Disable LCD Scaling */ - if (!pBIOSInfo->SAMM || pBIOSInfo->FirstInit) + if (!pVia->SAMM || pVia->FirstInit) hwp->writeCrtc(hwp, 0x79, 0x00); } else { if (pBIOSInfo->TVType == TVTYPE_PAL) { @@ -2165,19 +2181,19 @@ VIAPostSetTV3Mode(ScrnInfoPtr pScrn) ViaCrtcChange(hwp, 0x33, Misc[0], 0x20); hwp->writeCrtc(hwp, 0x6A, Misc[1]); - if ((pBIOSInfo->Chipset == VIA_CLE266) && - CLE266_REV_IS_AX(pBIOSInfo->ChipRev)) { + if ((pVia->Chipset == VIA_CLE266) && + CLE266_REV_IS_AX(pVia->ChipRev)) { hwp->writeCrtc(hwp, 0x6B, Misc[2] | 0x81); /* Fix TV clock Polarity for CLE266A2 */ - if (pBIOSInfo->ChipRev == 0x02) + if (pVia->ChipRev == 0x02) hwp->writeCrtc(hwp, 0x6C, Misc[3] | 0x01); } else hwp->writeCrtc(hwp, 0x6B, Misc[2] | 0x01); if (Mask->misc1 & 0x30) { /* CLE266Ax use 2x XCLK */ - if ((pBIOSInfo->Chipset == VIA_CLE266) && - CLE266_REV_IS_AX(pBIOSInfo->ChipRev)) + if ((pVia->Chipset == VIA_CLE266) && + CLE266_REV_IS_AX(pVia->ChipRev)) VIASetPrimaryClock(hwp, 0x471C); else VIASetPrimaryClock(hwp, (Misc[4] << 8) & Misc[5]); @@ -2197,18 +2213,18 @@ VIAPostSetTV3Mode(ScrnInfoPtr pScrn) * */ static void -ViaTVModePreset(VIABIOSInfoPtr pBIOSInfo) +ViaTVModePreset(VIAPtr pVia) { - switch (pBIOSInfo->TVEncoder) { + switch (pVia->pBIOSInfo->TVEncoder) { case VIA_TV2PLUS: - VIAPreSetTV2Mode(pBIOSInfo); + VIAPreSetTV2Mode(pVia); break; case VIA_TV3: case VIA_VT1622A: - VIAPreSetTV3Mode(pBIOSInfo); + VIAPreSetTV3Mode(pVia); break; case VIA_VT1623: - VIAPreSetVT1623Mode(pBIOSInfo); + VIAPreSetVT1623Mode(pVia); break; } } @@ -2217,15 +2233,16 @@ ViaTVModePreset(VIABIOSInfoPtr pBIOSInfo) * */ static void -ViaTVClose(VIABIOSInfoPtr pBIOSInfo) +ViaTVClose(VIAPtr pVia) { + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; I2CDevPtr dev; CARD8 W_Buffer[2]; dev = xf86CreateI2CDevRec(); dev->DevName = "TV"; dev->SlaveAddr = pBIOSInfo->TVI2CAdd; - dev->pI2CBus = pBIOSInfo->I2C_Port2; + dev->pI2CBus = pVia->I2C_Port2; if (xf86I2CDevInit(dev)) { switch (pBIOSInfo->TVEncoder) { @@ -2241,8 +2258,8 @@ ViaTVClose(VIABIOSInfoPtr pBIOSInfo) xf86I2CWriteRead(dev, W_Buffer,2, NULL,0); break; case VIA_VT1623: - VIAGPIOI2C_Initial(&(pBIOSInfo->GpioI2c), 0x40); - VIAGPIOI2C_Write(&(pBIOSInfo->GpioI2c), 0x0E, 0x0F); + VIAGPIOI2C_Initial(&(pVia->GpioI2c), 0x40); + VIAGPIOI2C_Write(&(pVia->GpioI2c), 0x0E, 0x0F); break; default: break; @@ -2364,7 +2381,8 @@ void VIASetModeUseBIOSTable(ScrnInfoPtr pScrn, DisplayModePtr mode) { vgaHWPtr hwp = VGAHWPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; + VIAPtr pVia = VIAPTR(pScrn); + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; VIAModeTablePtr pViaModeTable = pBIOSInfo->pModeTable; int port, offset, mask, data; int i; @@ -2387,10 +2405,10 @@ VIASetModeUseBIOSTable(ScrnInfoPtr pScrn, DisplayModePtr mode) if ((pBIOSInfo->ActiveDevice & VIA_DEVICE_TV)) { if (pBIOSInfo->TVIndex != VIA_TVRES_INVALID) { SetTV = TRUE; - ViaTVModePreset(pBIOSInfo); + ViaTVModePreset(pVia); } else { - if (!pBIOSInfo->SAMM) /* from via code */ - ViaTVClose(pBIOSInfo); + if (!pVia->SAMM) /* from via code */ + ViaTVClose(pVia); } } Mode = &(pViaModeTable->Modes[pBIOSInfo->ModeIndex]); @@ -2466,12 +2484,6 @@ VIASetModeUseBIOSTable(ScrnInfoPtr pScrn, DisplayModePtr mode) /* Enable modify CRTC starting address */ ViaCrtcChange(hwp, 0x11, 0x00, 0x80); - if (pBIOSInfo->FirstInit) { /* why do we do this here? */ - /* Clear Memory */ - memset(pBIOSInfo->FBBase, 0x00, pBIOSInfo->videoRambytes); - /*pBIOSInfo->FirstInit = FALSE;*/ - } - ViaSetBlankingEndOverflow(hwp); /* LCD Simultaneous Set Mode */ @@ -2480,7 +2492,7 @@ VIASetModeUseBIOSTable(ScrnInfoPtr pScrn, DisplayModePtr mode) VIAEnableLCD(pScrn); } else if ((pBIOSInfo->ConnectedDevice & (VIA_DEVICE_DFP | VIA_DEVICE_LCD)) && - (!pBIOSInfo->HasSecondary)) { + (!pVia->HasSecondary)) { VIADisableLCD(pScrn); } @@ -2526,7 +2538,8 @@ void VIASetModeForMHS(ScrnInfoPtr pScrn, DisplayModePtr mode) { vgaHWPtr hwp = VGAHWPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; + VIAPtr pVia = VIAPTR(pScrn); + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIASetModeForMHS\n")); /* Turn off Screen */ @@ -2534,16 +2547,16 @@ VIASetModeForMHS(ScrnInfoPtr pScrn, DisplayModePtr mode) if (pBIOSInfo->ActiveDevice & VIA_DEVICE_TV) { if (pBIOSInfo->TVIndex != VIA_TVRES_INVALID) { - ViaTVModePreset(pBIOSInfo); + ViaTVModePreset(pVia); ViaTVModePostSet(pScrn); } else { - if (!pBIOSInfo->SAMM) /* from via code */ - ViaTVClose(pBIOSInfo); + if (!pVia->SAMM) /* from via code */ + ViaTVClose(pVia); } } /* CLE266A2 apparently doesn't like this */ - if ((pBIOSInfo->Chipset != VIA_CLE266) || (pBIOSInfo->ChipRev != 0x02)) + if ((pVia->Chipset != VIA_CLE266) || (pVia->ChipRev != 0x02)) ViaCrtcChange(hwp, 0x6C, 0x00, 0x1E); if (pBIOSInfo->ActiveDevice & (VIA_DEVICE_DFP | VIA_DEVICE_LCD)) { @@ -2588,7 +2601,8 @@ void VIAEnableLCD(ScrnInfoPtr pScrn) { vgaHWPtr hwp = VGAHWPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = VIAPTR(pScrn)->pBIOSInfo; + VIAPtr pVia = VIAPTR(pScrn); + VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; VIAModeTablePtr pViaModeTable = pBIOSInfo->pModeTable; int i; @@ -2598,7 +2612,7 @@ VIAEnableLCD(ScrnInfoPtr pScrn) ViaCrtcChange(hwp, 0x6A, 0x08, 0x08); /* Find Panel Size Index for PowerSeq Table */ - if (pBIOSInfo->Chipset == VIA_CLE266) { + if (pVia->Chipset == VIA_CLE266) { if (pBIOSInfo->PanelSize != VIA_PANEL_INVALID) { for (i = 0; i < pViaModeTable->NumPowerOn; i++) { if (pViaModeTable->lcdTable[pBIOSInfo->PanelIndex].powerSeq == diff --git a/src/via_video.c b/src/via_video.c index 7fd61ce..3fd342b 100644 --- a/src/via_video.c +++ b/src/via_video.c @@ -229,10 +229,8 @@ static __inline void waitDISPLAYBEGIN(vmmtr viaVidEng) static Bool DecideOverlaySupport(ScrnInfoPtr pScrn) { VIAPtr pVia = VIAPTR(pScrn); - vgaHWPtr hwp = VGAHWPTR(pScrn); LPSCREENINFO Screen; unsigned long bandwidth; - CARD32 dRamType; if (pVia->IsSecondary) Screen = &(pVia->graphicInfo.Screen[1]); @@ -245,11 +243,9 @@ static Bool DecideOverlaySupport(ScrnInfoPtr pScrn) bandwidth = (Screen->dwHeight >> 4) * (Screen->dwWidth >> 5) * Screen->dwBPP * Screen->dwRefreshRate; - dRamType = (hwp->readCrtc(hwp, 0x3D) & 0x70) >> 4; - if ( pVia->ChipId != PCI_CHIP_VT3205 ) { - switch ( dRamType ) + switch (pVia->MemClk) { case SDR100: /* No overlay without DDR */ case SDR133: @@ -284,7 +280,7 @@ static Bool DecideOverlaySupport(ScrnInfoPtr pScrn) int bTV = 0; - switch(dRamType) { + switch(pVia->MemClk) { case SDR100: mClock = 50; /*HW base on 128 bit*/ break; @@ -307,7 +303,7 @@ static Bool DecideOverlaySupport(ScrnInfoPtr pScrn) break; } - switch(dRamType) + switch(pVia->MemClk) { case SDR100: case SDR133: |