aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/xgifb
diff options
context:
space:
mode:
authorAaro Koskinen <aaro.koskinen@iki.fi>2011-12-05 17:10:41 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2011-12-08 15:26:06 -0500
commitd1805b38700c8251139763386e806cdb51662661 (patch)
tree3d616f2d0a2cb9cd5bf0f731f85d0238ad6e3e10 /drivers/staging/xgifb
parent08ce239c106f1d147820f419e3dde86422663e7f (diff)
staging: xgifb: ReadVBIOSTablData(): copy only a single LVDS entry
Only a single LVDS table entry is needed by the driver. Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/xgifb')
-rw-r--r--drivers/staging/xgifb/vb_init.c53
-rw-r--r--drivers/staging/xgifb/vb_setmode.c6
2 files changed, 27 insertions, 32 deletions
diff --git a/drivers/staging/xgifb/vb_init.c b/drivers/staging/xgifb/vb_init.c
index 96e2334af2a..4f56978391a 100644
--- a/drivers/staging/xgifb/vb_init.c
+++ b/drivers/staging/xgifb/vb_init.c
@@ -1120,9 +1120,10 @@ static void ReadVBIOSTablData(struct pci_dev *pdev,
1120 struct xgifb_video_info *xgifb_info = pci_get_drvdata(pdev); 1120 struct xgifb_video_info *xgifb_info = pci_get_drvdata(pdev);
1121 u8 *vbios; 1121 u8 *vbios;
1122 unsigned long i; 1122 unsigned long i;
1123 unsigned char j, k; 1123 unsigned char j;
1124 struct XGI21_LVDSCapStruct *lvds; 1124 struct XGI21_LVDSCapStruct *lvds;
1125 size_t vbios_size; 1125 size_t vbios_size;
1126 int entry;
1126 1127
1127 if (xgifb_info->chip != XG21) 1128 if (xgifb_info->chip != XG21)
1128 return; 1129 return;
@@ -1148,32 +1149,32 @@ static void ReadVBIOSTablData(struct pci_dev *pdev,
1148 goto error; 1149 goto error;
1149 if (j == 0xff) 1150 if (j == 0xff)
1150 j = 1; 1151 j = 1;
1151 k = 0; 1152 /*
1153 * Read the LVDS table index scratch register set by the BIOS.
1154 */
1155 entry = xgifb_reg_get(xgifb_info->dev_info.P3d4, 0x36);
1156 if (entry >= j)
1157 entry = 0;
1158 i += entry * 25;
1152 lvds = &pVBInfo->XG21_LVDSCapList[0]; 1159 lvds = &pVBInfo->XG21_LVDSCapList[0];
1153 do { 1160 if (vbios_size <= i + 24)
1154 if (vbios_size <= i + 24) 1161 goto error;
1155 goto error; 1162 lvds->LVDS_Capability = vbios[i] | (vbios[i + 1] << 8);
1156 lvds->LVDS_Capability = vbios[i] | (vbios[i + 1] << 8); 1163 lvds->LVDSHT = vbios[i + 2] | (vbios[i + 3] << 8);
1157 lvds->LVDSHT = vbios[i + 2] | (vbios[i + 3] << 8); 1164 lvds->LVDSVT = vbios[i + 4] | (vbios[i + 5] << 8);
1158 lvds->LVDSVT = vbios[i + 4] | (vbios[i + 5] << 8); 1165 lvds->LVDSHDE = vbios[i + 6] | (vbios[i + 7] << 8);
1159 lvds->LVDSHDE = vbios[i + 6] | (vbios[i + 7] << 8); 1166 lvds->LVDSVDE = vbios[i + 8] | (vbios[i + 9] << 8);
1160 lvds->LVDSVDE = vbios[i + 8] | (vbios[i + 9] << 8); 1167 lvds->LVDSHFP = vbios[i + 10] | (vbios[i + 11] << 8);
1161 lvds->LVDSHFP = vbios[i + 10] | (vbios[i + 11] << 8); 1168 lvds->LVDSVFP = vbios[i + 12] | (vbios[i + 13] << 8);
1162 lvds->LVDSVFP = vbios[i + 12] | (vbios[i + 13] << 8); 1169 lvds->LVDSHSYNC = vbios[i + 14] | (vbios[i + 15] << 8);
1163 lvds->LVDSHSYNC = vbios[i + 14] | (vbios[i + 15] << 8); 1170 lvds->LVDSVSYNC = vbios[i + 16] | (vbios[i + 17] << 8);
1164 lvds->LVDSVSYNC = vbios[i + 16] | (vbios[i + 17] << 8); 1171 lvds->VCLKData1 = vbios[i + 18];
1165 lvds->VCLKData1 = vbios[i + 18]; 1172 lvds->VCLKData2 = vbios[i + 19];
1166 lvds->VCLKData2 = vbios[i + 19]; 1173 lvds->PSC_S1 = vbios[i + 20];
1167 lvds->PSC_S1 = vbios[i + 20]; 1174 lvds->PSC_S2 = vbios[i + 21];
1168 lvds->PSC_S2 = vbios[i + 21]; 1175 lvds->PSC_S3 = vbios[i + 22];
1169 lvds->PSC_S3 = vbios[i + 22]; 1176 lvds->PSC_S4 = vbios[i + 23];
1170 lvds->PSC_S4 = vbios[i + 23]; 1177 lvds->PSC_S5 = vbios[i + 24];
1171 lvds->PSC_S5 = vbios[i + 24];
1172 i += 25;
1173 j--;
1174 k++;
1175 lvds++;
1176 } while (j > 0 && k < ARRAY_SIZE(XGI21_LCDCapList));
1177 vfree(vbios); 1178 vfree(vbios);
1178 pVBInfo->IF_DEF_LVDS = 1; 1179 pVBInfo->IF_DEF_LVDS = 1;
1179 return; 1180 return;
diff --git a/drivers/staging/xgifb/vb_setmode.c b/drivers/staging/xgifb/vb_setmode.c
index 31c892736ba..6b9b72081a8 100644
--- a/drivers/staging/xgifb/vb_setmode.c
+++ b/drivers/staging/xgifb/vb_setmode.c
@@ -3650,12 +3650,6 @@ static void XGI_XG27BLSignalVDD(unsigned short tempbh, unsigned short tempbl,
3650 3650
3651static unsigned short XGI_GetLVDSOEMTableIndex(struct vb_device_info *pVBInfo) 3651static unsigned short XGI_GetLVDSOEMTableIndex(struct vb_device_info *pVBInfo)
3652{ 3652{
3653 unsigned short index;
3654
3655 index = xgifb_reg_get(pVBInfo->P3d4, 0x36);
3656 if (index < sizeof(XGI21_LCDCapList)
3657 / sizeof(struct XGI21_LVDSCapStruct))
3658 return index;
3659 return 0; 3653 return 0;
3660} 3654}
3661 3655