From 29811d124928d1c5c72f31fc62c472e2b64ada8f Mon Sep 17 00:00:00 2001 From: Aaro Koskinen Date: Tue, 6 Dec 2011 00:10:41 +0200 Subject: [PATCH] --- yaml --- r: 281287 b: refs/heads/master c: d1805b38700c8251139763386e806cdb51662661 h: refs/heads/master i: 281285: 42c5c1e91a6ee3f46ca7a54440f670124ff55b3f 281283: 0d0a98eb4e65a767b48c713038b05ccb0577eb48 281279: ed15316e99bddfbb0f43c40355872f749c3eb36f v: v3 --- [refs] | 2 +- trunk/drivers/staging/xgifb/vb_init.c | 53 ++++++++++++------------ trunk/drivers/staging/xgifb/vb_setmode.c | 6 --- 3 files changed, 28 insertions(+), 33 deletions(-) diff --git a/[refs] b/[refs] index 222c81e53f51..6f638217fb05 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 08ce239c106f1d147820f419e3dde86422663e7f +refs/heads/master: d1805b38700c8251139763386e806cdb51662661 diff --git a/trunk/drivers/staging/xgifb/vb_init.c b/trunk/drivers/staging/xgifb/vb_init.c index 96e2334af2a1..4f56978391ad 100644 --- a/trunk/drivers/staging/xgifb/vb_init.c +++ b/trunk/drivers/staging/xgifb/vb_init.c @@ -1120,9 +1120,10 @@ static void ReadVBIOSTablData(struct pci_dev *pdev, struct xgifb_video_info *xgifb_info = pci_get_drvdata(pdev); u8 *vbios; unsigned long i; - unsigned char j, k; + unsigned char j; struct XGI21_LVDSCapStruct *lvds; size_t vbios_size; + int entry; if (xgifb_info->chip != XG21) return; @@ -1148,32 +1149,32 @@ static void ReadVBIOSTablData(struct pci_dev *pdev, goto error; if (j == 0xff) j = 1; - k = 0; + /* + * Read the LVDS table index scratch register set by the BIOS. + */ + entry = xgifb_reg_get(xgifb_info->dev_info.P3d4, 0x36); + if (entry >= j) + entry = 0; + i += entry * 25; lvds = &pVBInfo->XG21_LVDSCapList[0]; - do { - if (vbios_size <= i + 24) - goto error; - lvds->LVDS_Capability = vbios[i] | (vbios[i + 1] << 8); - lvds->LVDSHT = vbios[i + 2] | (vbios[i + 3] << 8); - lvds->LVDSVT = vbios[i + 4] | (vbios[i + 5] << 8); - lvds->LVDSHDE = vbios[i + 6] | (vbios[i + 7] << 8); - lvds->LVDSVDE = vbios[i + 8] | (vbios[i + 9] << 8); - lvds->LVDSHFP = vbios[i + 10] | (vbios[i + 11] << 8); - lvds->LVDSVFP = vbios[i + 12] | (vbios[i + 13] << 8); - lvds->LVDSHSYNC = vbios[i + 14] | (vbios[i + 15] << 8); - lvds->LVDSVSYNC = vbios[i + 16] | (vbios[i + 17] << 8); - lvds->VCLKData1 = vbios[i + 18]; - lvds->VCLKData2 = vbios[i + 19]; - lvds->PSC_S1 = vbios[i + 20]; - lvds->PSC_S2 = vbios[i + 21]; - lvds->PSC_S3 = vbios[i + 22]; - lvds->PSC_S4 = vbios[i + 23]; - lvds->PSC_S5 = vbios[i + 24]; - i += 25; - j--; - k++; - lvds++; - } while (j > 0 && k < ARRAY_SIZE(XGI21_LCDCapList)); + if (vbios_size <= i + 24) + goto error; + lvds->LVDS_Capability = vbios[i] | (vbios[i + 1] << 8); + lvds->LVDSHT = vbios[i + 2] | (vbios[i + 3] << 8); + lvds->LVDSVT = vbios[i + 4] | (vbios[i + 5] << 8); + lvds->LVDSHDE = vbios[i + 6] | (vbios[i + 7] << 8); + lvds->LVDSVDE = vbios[i + 8] | (vbios[i + 9] << 8); + lvds->LVDSHFP = vbios[i + 10] | (vbios[i + 11] << 8); + lvds->LVDSVFP = vbios[i + 12] | (vbios[i + 13] << 8); + lvds->LVDSHSYNC = vbios[i + 14] | (vbios[i + 15] << 8); + lvds->LVDSVSYNC = vbios[i + 16] | (vbios[i + 17] << 8); + lvds->VCLKData1 = vbios[i + 18]; + lvds->VCLKData2 = vbios[i + 19]; + lvds->PSC_S1 = vbios[i + 20]; + lvds->PSC_S2 = vbios[i + 21]; + lvds->PSC_S3 = vbios[i + 22]; + lvds->PSC_S4 = vbios[i + 23]; + lvds->PSC_S5 = vbios[i + 24]; vfree(vbios); pVBInfo->IF_DEF_LVDS = 1; return; diff --git a/trunk/drivers/staging/xgifb/vb_setmode.c b/trunk/drivers/staging/xgifb/vb_setmode.c index 31c892736ba8..6b9b72081a86 100644 --- a/trunk/drivers/staging/xgifb/vb_setmode.c +++ b/trunk/drivers/staging/xgifb/vb_setmode.c @@ -3650,12 +3650,6 @@ static void XGI_XG27BLSignalVDD(unsigned short tempbh, unsigned short tempbl, static unsigned short XGI_GetLVDSOEMTableIndex(struct vb_device_info *pVBInfo) { - unsigned short index; - - index = xgifb_reg_get(pVBInfo->P3d4, 0x36); - if (index < sizeof(XGI21_LCDCapList) - / sizeof(struct XGI21_LVDSCapStruct)) - return index; return 0; }