summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuc Verhaegen <libv@skynet.be>2004-08-04 17:01:15 +0000
committerLuc Verhaegen <libv@skynet.be>2004-08-04 17:01:15 +0000
commit7b4053122db174dea6535b7fdbcec69bac371890 (patch)
tree234a3f65f999698f74230f3e6d0e2cabbe9f15c2
parentf3dd7f7586e4a25d8f162b697b5a9edc93c6e070 (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.c48
-rw-r--r--src/via_bios.h25
-rw-r--r--src/via_driver.c63
-rw-r--r--src/via_driver.h14
-rw-r--r--src/via_i2c.c2
-rw-r--r--src/via_mode.c380
-rw-r--r--src/via_video.c10
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: