Skip to content

Commit

Permalink
staging: xgifb: enable forcecrt2type on XG21
Browse files Browse the repository at this point in the history
Make "forcecrt2type" to apply also for XG21. The patch enables user to
switch LVDS LCD ON/OFF without the need to update the video BIOS.

Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Aaro Koskinen authored and Greg Kroah-Hartman committed Dec 8, 2011
1 parent 7760910 commit 25aa75f
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 12 deletions.
28 changes: 17 additions & 11 deletions drivers/staging/xgifb/XGI_main_26.c
Original file line number Diff line number Diff line change
Expand Up @@ -1744,17 +1744,16 @@ static void XGIfb_detect_VB(struct xgifb_video_info *xgifb_info)
XGIfb_crt1off = 0;
}

if (XGIfb_crt2type != -1)
/* TW: Override with option */
xgifb_info->display2 = XGIfb_crt2type;
else if (cr32 & XGI_VB_TV)
xgifb_info->display2 = XGIFB_DISP_TV;
else if (cr32 & XGI_VB_LCD)
xgifb_info->display2 = XGIFB_DISP_LCD;
else if (cr32 & XGI_VB_CRT2)
xgifb_info->display2 = XGIFB_DISP_CRT;
else
xgifb_info->display2 = XGIFB_DISP_NONE;
if (!xgifb_info->display2_force) {
if (cr32 & XGI_VB_TV)
xgifb_info->display2 = XGIFB_DISP_TV;
else if (cr32 & XGI_VB_LCD)
xgifb_info->display2 = XGIFB_DISP_LCD;
else if (cr32 & XGI_VB_CRT2)
xgifb_info->display2 = XGIFB_DISP_CRT;
else
xgifb_info->display2 = XGIFB_DISP_NONE;
}

if (XGIfb_tvplug != -1)
/* PR/TW: Override with option */
Expand Down Expand Up @@ -1926,6 +1925,11 @@ static int __devinit xgifb_probe(struct pci_dev *pdev,
goto error;
}

if (XGIfb_crt2type != -1) {
xgifb_info->display2 = XGIfb_crt2type;
xgifb_info->display2_force = true;
}

XGIRegInit(&xgifb_info->dev_info, (unsigned long)hw_info->pjIOAddress);

xgifb_reg_set(XGISR, IND_XGI_PASSWORD, XGI_PASSWORD);
Expand Down Expand Up @@ -2104,6 +2108,8 @@ static int __devinit xgifb_probe(struct pci_dev *pdev,

if (xgifb_info->hasVB != HASVB_NONE)
XGIfb_detect_VB(xgifb_info);
else if (xgifb_info->chip != XG21)
xgifb_info->display2 = XGIFB_DISP_NONE;

if (xgifb_info->display2 == XGIFB_DISP_LCD) {
if (!enable_dstn) {
Expand Down
1 change: 1 addition & 0 deletions drivers/staging/xgifb/XGIfb.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ struct xgifb_video_info {
unsigned int refresh_rate;

enum xgifb_display_type display2; /* the second display output type */
bool display2_force;
unsigned char hasVB;
unsigned char TV_type;
unsigned char TV_plug;
Expand Down
8 changes: 7 additions & 1 deletion drivers/staging/xgifb/vb_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -1136,7 +1136,13 @@ static void xgifb_read_vbios(struct pci_dev *pdev,
}
if (vbios_size <= 0x65)
goto error;
if (!(vbios[0x65] & 0x1)) {
/*
* The user can ignore the LVDS bit in the BIOS and force the display
* type.
*/
if (!(vbios[0x65] & 0x1) &&
(!xgifb_info->display2_force ||
xgifb_info->display2 != XGIFB_DISP_LCD)) {
vfree(vbios);
return;
}
Expand Down

0 comments on commit 25aa75f

Please sign in to comment.