Commit 9d1c6299 authored by Aaro Koskinen's avatar Aaro Koskinen Committed by Greg Kroah-Hartman

staging: xgifb: XGI_GetLcdPtr: pass the table pointer directly

Let the caller pass the table pointer directly instead of using a magic
number to indicate which table to use.
Signed-off-by: default avatarAaro Koskinen <aaro.koskinen@iki.fi>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 6c27b370
...@@ -1305,52 +1305,21 @@ static void XGI_GetLVDSResInfo(unsigned short ModeNo, ...@@ -1305,52 +1305,21 @@ static void XGI_GetLVDSResInfo(unsigned short ModeNo,
pVBInfo->VDE = yres; pVBInfo->VDE = yres;
} }
static void *XGI_GetLcdPtr(unsigned short BX, unsigned short ModeNo, static void *XGI_GetLcdPtr(struct XGI330_LCDDataTablStruct const *table,
unsigned short ModeNo,
unsigned short ModeIdIndex, unsigned short ModeIdIndex,
unsigned short RefreshRateTableIndex, unsigned short RefreshRateTableIndex,
struct vb_device_info *pVBInfo) struct vb_device_info *pVBInfo)
{ {
unsigned short i, tempdx, tempbx, modeflag; unsigned short i, tempdx, tempbx, modeflag;
struct XGI330_LCDDataTablStruct *tempdi = NULL; tempbx = 0;
tempbx = BX;
modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag; modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
switch (tempbx) {
case 0:
tempdi = xgifb_epllcd_crt1_h;
break;
case 1:
tempdi = xgifb_epllcd_crt1_v;
break;
case 2:
tempdi = XGI_EPLLCDDataPtr;
break;
case 3:
tempdi = XGI_EPLLCDDesDataPtr;
break;
case 4:
tempdi = XGI_LCDDataTable;
break;
case 5:
if ((pVBInfo->VBType & VB_SIS301LV) ||
(pVBInfo->VBType & VB_SIS302LV))
tempdi = xgifb_lcddldes;
else
tempdi = XGI_LCDDesDataTable;
break;
default:
break;
}
if (tempdi == NULL) /* OEMUtil */
return NULL;
i = 0; i = 0;
while (tempdi[i].PANELID != 0xff) { while (table[i].PANELID != 0xff) {
tempdx = pVBInfo->LCDResInfo; tempdx = pVBInfo->LCDResInfo;
if (tempbx & 0x0080) { /* OEMUtil */ if (tempbx & 0x0080) { /* OEMUtil */
tempbx &= (~0x0080); tempbx &= (~0x0080);
...@@ -1360,21 +1329,21 @@ static void *XGI_GetLcdPtr(unsigned short BX, unsigned short ModeNo, ...@@ -1360,21 +1329,21 @@ static void *XGI_GetLcdPtr(unsigned short BX, unsigned short ModeNo,
if (pVBInfo->LCDInfo & EnableScalingLCD) if (pVBInfo->LCDInfo & EnableScalingLCD)
tempdx &= (~PanelResInfo); tempdx &= (~PanelResInfo);
if (tempdi[i].PANELID == tempdx) { if (table[i].PANELID == tempdx) {
tempbx = tempdi[i].MASK; tempbx = table[i].MASK;
tempdx = pVBInfo->LCDInfo; tempdx = pVBInfo->LCDInfo;
if (modeflag & HalfDCLK) if (modeflag & HalfDCLK)
tempdx |= SetLCDLowResolution; tempdx |= SetLCDLowResolution;
tempbx &= tempdx; tempbx &= tempdx;
if (tempbx == tempdi[i].CAP) if (tempbx == table[i].CAP)
break; break;
} }
i++; i++;
} }
return tempdi[i].DATAPTR; return table[i].DATAPTR;
} }
static struct SiS_TVData const *XGI_GetTVPtr(unsigned short ModeNo, static struct SiS_TVData const *XGI_GetTVPtr(unsigned short ModeNo,
...@@ -1411,13 +1380,10 @@ static void XGI_GetLVDSData(unsigned short ModeNo, unsigned short ModeIdIndex, ...@@ -1411,13 +1380,10 @@ static void XGI_GetLVDSData(unsigned short ModeNo, unsigned short ModeIdIndex,
unsigned short RefreshRateTableIndex, unsigned short RefreshRateTableIndex,
struct vb_device_info *pVBInfo) struct vb_device_info *pVBInfo)
{ {
unsigned short tempbx;
struct SiS_LVDSData *LCDPtr = NULL; struct SiS_LVDSData *LCDPtr = NULL;
tempbx = 2;
if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) { if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) {
LCDPtr = XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex, LCDPtr = XGI_GetLcdPtr(XGI_EPLLCDDataPtr, ModeNo, ModeIdIndex,
RefreshRateTableIndex, pVBInfo); RefreshRateTableIndex, pVBInfo);
pVBInfo->VGAHT = LCDPtr->VGAHT; pVBInfo->VGAHT = LCDPtr->VGAHT;
pVBInfo->VGAVT = LCDPtr->VGAVT; pVBInfo->VGAVT = LCDPtr->VGAVT;
...@@ -1454,17 +1420,15 @@ static void XGI_ModCRT1Regs(unsigned short ModeNo, unsigned short ModeIdIndex, ...@@ -1454,17 +1420,15 @@ static void XGI_ModCRT1Regs(unsigned short ModeNo, unsigned short ModeIdIndex,
struct vb_device_info *pVBInfo) struct vb_device_info *pVBInfo)
{ {
unsigned char index; unsigned char index;
unsigned short tempbx, i; unsigned short i;
struct XGI_LVDSCRT1HDataStruct *LCDPtr = NULL; struct XGI_LVDSCRT1HDataStruct *LCDPtr = NULL;
struct XGI_LVDSCRT1VDataStruct *LCDPtr1 = NULL; struct XGI_LVDSCRT1VDataStruct *LCDPtr1 = NULL;
index = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC; index = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
index = index & IndexMask; index = index & IndexMask;
tempbx = 0;
if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) { if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) {
LCDPtr = XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex, LCDPtr = XGI_GetLcdPtr(xgifb_epllcd_crt1_h, ModeNo, ModeIdIndex,
RefreshRateTableIndex, pVBInfo); RefreshRateTableIndex, pVBInfo);
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
...@@ -1473,11 +1437,10 @@ static void XGI_ModCRT1Regs(unsigned short ModeNo, unsigned short ModeIdIndex, ...@@ -1473,11 +1437,10 @@ static void XGI_ModCRT1Regs(unsigned short ModeNo, unsigned short ModeIdIndex,
XGI_SetCRT1Timing_H(pVBInfo, HwDeviceExtension); XGI_SetCRT1Timing_H(pVBInfo, HwDeviceExtension);
tempbx = 1;
if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) { if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) {
LCDPtr1 = XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex, LCDPtr1 = XGI_GetLcdPtr(xgifb_epllcd_crt1_v, ModeNo,
RefreshRateTableIndex, pVBInfo); ModeIdIndex, RefreshRateTableIndex,
pVBInfo);
for (i = 0; i < 7; i++) for (i = 0; i < 7; i++)
pVBInfo->TimingV[0].data[i] = LCDPtr1[0].Reg[i]; pVBInfo->TimingV[0].data[i] = LCDPtr1[0].Reg[i];
} }
...@@ -1567,13 +1530,14 @@ static void XGI_SetLVDSRegs(unsigned short ModeNo, unsigned short ModeIdIndex, ...@@ -1567,13 +1530,14 @@ static void XGI_SetLVDSRegs(unsigned short ModeNo, unsigned short ModeIdIndex,
struct XGI330_LCDDataDesStruct2 *LCDPtr1 = NULL; struct XGI330_LCDDataDesStruct2 *LCDPtr1 = NULL;
modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag; modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
tempbx = 3;
if (pVBInfo->LCDInfo & EnableScalingLCD) if (pVBInfo->LCDInfo & EnableScalingLCD)
LCDPtr1 = XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex, LCDPtr1 = XGI_GetLcdPtr(XGI_EPLLCDDesDataPtr, ModeNo,
RefreshRateTableIndex, pVBInfo); ModeIdIndex, RefreshRateTableIndex,
pVBInfo);
else else
LCDPtr = XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex, LCDPtr = XGI_GetLcdPtr(XGI_EPLLCDDesDataPtr, ModeNo,
RefreshRateTableIndex, pVBInfo); ModeIdIndex, RefreshRateTableIndex,
pVBInfo);
XGI_GetLCDSync(&tempax, &tempbx, pVBInfo); XGI_GetLCDSync(&tempax, &tempbx, pVBInfo);
push1 = tempbx; push1 = tempbx;
...@@ -2804,7 +2768,7 @@ static void XGI_GetCRT2Data(unsigned short ModeNo, unsigned short ModeIdIndex, ...@@ -2804,7 +2768,7 @@ static void XGI_GetCRT2Data(unsigned short ModeNo, unsigned short ModeIdIndex,
unsigned short RefreshRateTableIndex, unsigned short RefreshRateTableIndex,
struct vb_device_info *pVBInfo) struct vb_device_info *pVBInfo)
{ {
unsigned short tempax = 0, tempbx, modeflag, resinfo; unsigned short tempax = 0, tempbx = 0, modeflag, resinfo;
struct SiS_LCDData *LCDPtr = NULL; struct SiS_LCDData *LCDPtr = NULL;
...@@ -2820,10 +2784,8 @@ static void XGI_GetCRT2Data(unsigned short ModeNo, unsigned short ModeIdIndex, ...@@ -2820,10 +2784,8 @@ static void XGI_GetCRT2Data(unsigned short ModeNo, unsigned short ModeIdIndex,
return; return;
} }
tempbx = 4;
if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) { if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) {
LCDPtr = XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex, LCDPtr = XGI_GetLcdPtr(XGI_LCDDataTable, ModeNo, ModeIdIndex,
RefreshRateTableIndex, pVBInfo); RefreshRateTableIndex, pVBInfo);
pVBInfo->RVBHCMAX = LCDPtr->RVBHCMAX; pVBInfo->RVBHCMAX = LCDPtr->RVBHCMAX;
...@@ -4059,9 +4021,14 @@ static void XGI_SetLCDRegs(unsigned short ModeNo, unsigned short ModeIdIndex, ...@@ -4059,9 +4021,14 @@ static void XGI_SetLCDRegs(unsigned short ModeNo, unsigned short ModeIdIndex,
xgifb_reg_and_or(pVBInfo->Part2Port, 0x18, 0xDF, 0x00); xgifb_reg_and_or(pVBInfo->Part2Port, 0x18, 0xDF, 0x00);
/* Customized LCDB Does not add */ /* Customized LCDB Does not add */
tempbx = 5; if ((pVBInfo->VBType & VB_SIS301LV) || (pVBInfo->VBType & VB_SIS302LV))
LCDBDesPtr = XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex, LCDBDesPtr = XGI_GetLcdPtr(xgifb_lcddldes, ModeNo, ModeIdIndex,
RefreshRateTableIndex, pVBInfo); RefreshRateTableIndex, pVBInfo);
else
LCDBDesPtr = XGI_GetLcdPtr(XGI_LCDDesDataTable, ModeNo,
ModeIdIndex, RefreshRateTableIndex,
pVBInfo);
tempah = pVBInfo->LCDResInfo; tempah = pVBInfo->LCDResInfo;
tempah &= PanelResInfo; tempah &= PanelResInfo;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment