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

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
Loading
Loading
Loading
Loading
+30 −63
Original line number Diff line number Diff line
@@ -1305,52 +1305,21 @@ static void XGI_GetLVDSResInfo(unsigned short ModeNo,
	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 RefreshRateTableIndex,
		struct vb_device_info *pVBInfo)
{
	unsigned short i, tempdx, tempbx, modeflag;

	struct XGI330_LCDDataTablStruct *tempdi = NULL;

	tempbx = BX;
	tempbx = 0;

	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;

	while (tempdi[i].PANELID != 0xff) {
	while (table[i].PANELID != 0xff) {
		tempdx = pVBInfo->LCDResInfo;
		if (tempbx & 0x0080) { /* OEMUtil */
			tempbx &= (~0x0080);
@@ -1360,21 +1329,21 @@ static void *XGI_GetLcdPtr(unsigned short BX, unsigned short ModeNo,
		if (pVBInfo->LCDInfo & EnableScalingLCD)
			tempdx &= (~PanelResInfo);

		if (tempdi[i].PANELID == tempdx) {
			tempbx = tempdi[i].MASK;
		if (table[i].PANELID == tempdx) {
			tempbx = table[i].MASK;
			tempdx = pVBInfo->LCDInfo;

			if (modeflag & HalfDCLK)
				tempdx |= SetLCDLowResolution;

			tempbx &= tempdx;
			if (tempbx == tempdi[i].CAP)
			if (tempbx == table[i].CAP)
				break;
		}
		i++;
	}

	return tempdi[i].DATAPTR;
	return table[i].DATAPTR;
}

static struct SiS_TVData const *XGI_GetTVPtr(unsigned short ModeNo,
@@ -1411,13 +1380,10 @@ static void XGI_GetLVDSData(unsigned short ModeNo, unsigned short ModeIdIndex,
		unsigned short RefreshRateTableIndex,
		struct vb_device_info *pVBInfo)
{
	unsigned short tempbx;
	struct SiS_LVDSData *LCDPtr = NULL;

	tempbx = 2;

	if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) {
		LCDPtr = XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex,
		LCDPtr = XGI_GetLcdPtr(XGI_EPLLCDDataPtr, ModeNo, ModeIdIndex,
				       RefreshRateTableIndex, pVBInfo);
		pVBInfo->VGAHT = LCDPtr->VGAHT;
		pVBInfo->VGAVT = LCDPtr->VGAVT;
@@ -1454,17 +1420,15 @@ static void XGI_ModCRT1Regs(unsigned short ModeNo, unsigned short ModeIdIndex,
		struct vb_device_info *pVBInfo)
{
	unsigned char index;
	unsigned short tempbx, i;
	unsigned short i;
	struct XGI_LVDSCRT1HDataStruct *LCDPtr = NULL;
	struct XGI_LVDSCRT1VDataStruct *LCDPtr1 = NULL;

	index = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
	index = index & IndexMask;

	tempbx = 0;

	if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) {
		LCDPtr = XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex,
		LCDPtr = XGI_GetLcdPtr(xgifb_epllcd_crt1_h, ModeNo, ModeIdIndex,
				       RefreshRateTableIndex, pVBInfo);

		for (i = 0; i < 8; i++)
@@ -1473,11 +1437,10 @@ static void XGI_ModCRT1Regs(unsigned short ModeNo, unsigned short ModeIdIndex,

	XGI_SetCRT1Timing_H(pVBInfo, HwDeviceExtension);

	tempbx = 1;

	if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) {
		LCDPtr1 = XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex,
					RefreshRateTableIndex, pVBInfo);
		LCDPtr1 = XGI_GetLcdPtr(xgifb_epllcd_crt1_v, ModeNo,
					ModeIdIndex, RefreshRateTableIndex,
					pVBInfo);
		for (i = 0; i < 7; i++)
			pVBInfo->TimingV[0].data[i] = LCDPtr1[0].Reg[i];
	}
@@ -1567,13 +1530,14 @@ static void XGI_SetLVDSRegs(unsigned short ModeNo, unsigned short ModeIdIndex,
	struct XGI330_LCDDataDesStruct2 *LCDPtr1 = NULL;

	modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
	tempbx = 3;
	if (pVBInfo->LCDInfo & EnableScalingLCD)
		LCDPtr1 = XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex,
					RefreshRateTableIndex, pVBInfo);
		LCDPtr1 = XGI_GetLcdPtr(XGI_EPLLCDDesDataPtr, ModeNo,
					ModeIdIndex, RefreshRateTableIndex,
					pVBInfo);
	else
		LCDPtr = XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex,
				       RefreshRateTableIndex, pVBInfo);
		LCDPtr = XGI_GetLcdPtr(XGI_EPLLCDDesDataPtr, ModeNo,
				       ModeIdIndex, RefreshRateTableIndex,
				       pVBInfo);

	XGI_GetLCDSync(&tempax, &tempbx, pVBInfo);
	push1 = tempbx;
@@ -2804,7 +2768,7 @@ static void XGI_GetCRT2Data(unsigned short ModeNo, unsigned short ModeIdIndex,
		unsigned short RefreshRateTableIndex,
		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;

@@ -2820,10 +2784,8 @@ static void XGI_GetCRT2Data(unsigned short ModeNo, unsigned short ModeIdIndex,
		return;
	}

	tempbx = 4;

	if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) {
		LCDPtr = XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex,
		LCDPtr = XGI_GetLcdPtr(XGI_LCDDataTable, ModeNo, ModeIdIndex,
				       RefreshRateTableIndex, pVBInfo);

		pVBInfo->RVBHCMAX = LCDPtr->RVBHCMAX;
@@ -4059,9 +4021,14 @@ static void XGI_SetLCDRegs(unsigned short ModeNo, unsigned short ModeIdIndex,
	xgifb_reg_and_or(pVBInfo->Part2Port, 0x18, 0xDF, 0x00);

	/* Customized LCDB Does not add */
	tempbx = 5;
	LCDBDesPtr = XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex,
	if ((pVBInfo->VBType & VB_SIS301LV) || (pVBInfo->VBType & VB_SIS302LV))
		LCDBDesPtr = XGI_GetLcdPtr(xgifb_lcddldes, ModeNo, ModeIdIndex,
					   RefreshRateTableIndex, pVBInfo);
	else
		LCDBDesPtr = XGI_GetLcdPtr(XGI_LCDDesDataTable, ModeNo,
					   ModeIdIndex, RefreshRateTableIndex,
					   pVBInfo);

	tempah = pVBInfo->LCDResInfo;
	tempah &= PanelResInfo;