diff options
author | Aaro Koskinen <aaro.koskinen@iki.fi> | 2011-12-05 17:10:41 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-12-08 15:26:06 -0500 |
commit | d1805b38700c8251139763386e806cdb51662661 (patch) | |
tree | 3d616f2d0a2cb9cd5bf0f731f85d0238ad6e3e10 /drivers/staging/xgifb | |
parent | 08ce239c106f1d147820f419e3dde86422663e7f (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.c | 53 | ||||
-rw-r--r-- | drivers/staging/xgifb/vb_setmode.c | 6 |
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 | ||
3651 | static unsigned short XGI_GetLVDSOEMTableIndex(struct vb_device_info *pVBInfo) | 3651 | static 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 | ||