drivers/staging/xgifb/XGI_main_26.c | 256 +++++++++++++----------------------- 1 file changed, 92 insertions(+), 164 deletions(-) diff --git a/drivers/staging/xgifb/XGI_main_26.c b/drivers/staging/xgifb/XGI_main_26.c index 6930f7eb741b..0df7fb2b8892 100644 --- a/drivers/staging/xgifb/XGI_main_26.c +++ b/drivers/staging/xgifb/XGI_main_26.c @@ -731,179 +731,107 @@ static void XGIfb_post_setmode(struct xgifb_video_info *xgifb_info) xgifb_reg_and(XGISR, IND_SIS_RAMDAC_CONTROL, ~0x04); - if (xgifb_info->display2 == XGIFB_DISP_TV && - xgifb_info->hasVB == HASVB_301) { - reg = xgifb_reg_get(XGIPART4, 0x01); + if (xgifb_info->display2 != XGIFB_DISP_TV || + xgifb_info->hasVB != HASVB_301) + return; - if (reg < 0xB0) { /* Set filter for XGI301 */ - int filter_tb; + reg = xgifb_reg_get(XGIPART4, 0x01); + if (reg < 0xB0) { /* Set filter for XGI301 */ + int filter_tb; - switch (xgifb_info->video_width) { - case 320: - filter_tb = (xgifb_info->TV_type == - TVMODE_NTSC) ? 4 : 12; - break; - case 640: - filter_tb = (xgifb_info->TV_type == - TVMODE_NTSC) ? 5 : 13; - break; - case 720: - filter_tb = (xgifb_info->TV_type == - TVMODE_NTSC) ? 6 : 14; - break; - case 800: - filter_tb = (xgifb_info->TV_type == - TVMODE_NTSC) ? 7 : 15; - break; - default: - filter_tb = 0; - filter = -1; - break; - } - xgifb_reg_or(XGIPART1, - SIS_CRT2_WENABLE_315, - 0x01); + switch (xgifb_info->video_width) { + case 320: + filter_tb = xgifb_info->TV_type == TVMODE_NTSC ? 4 : 12; + break; + case 640: + filter_tb = xgifb_info->TV_type == TVMODE_NTSC ? 5 : 13; + break; + case 720: + filter_tb = xgifb_info->TV_type == TVMODE_NTSC ? 6 : 14; + break; + case 800: + filter_tb = xgifb_info->TV_type == TVMODE_NTSC ? 7 : 15; + break; + default: + filter_tb = 0; + filter = -1; + break; + } + xgifb_reg_or(XGIPART1, SIS_CRT2_WENABLE_315, 0x01); - if (xgifb_info->TV_type == TVMODE_NTSC) { - xgifb_reg_and(XGIPART2, 0x3a, 0x1f); - - if (xgifb_info->TV_plug == TVPLUG_SVIDEO) { - xgifb_reg_and(XGIPART2, 0x30, 0xdf); - - } else if (xgifb_info->TV_plug - == TVPLUG_COMPOSITE) { - xgifb_reg_or(XGIPART2, 0x30, 0x20); - - switch (xgifb_info->video_width) { - case 640: - xgifb_reg_set(XGIPART2, - 0x35, - 0xEB); - xgifb_reg_set(XGIPART2, - 0x36, - 0x04); - xgifb_reg_set(XGIPART2, - 0x37, - 0x25); - xgifb_reg_set(XGIPART2, - 0x38, - 0x18); - break; - case 720: - xgifb_reg_set(XGIPART2, - 0x35, - 0xEE); - xgifb_reg_set(XGIPART2, - 0x36, - 0x0C); - xgifb_reg_set(XGIPART2, - 0x37, - 0x22); - xgifb_reg_set(XGIPART2, - 0x38, - 0x08); - break; - case 800: - xgifb_reg_set(XGIPART2, - 0x35, - 0xEB); - xgifb_reg_set(XGIPART2, - 0x36, - 0x15); - xgifb_reg_set(XGIPART2, - 0x37, - 0x25); - xgifb_reg_set(XGIPART2, - 0x38, - 0xF6); - break; - } - } + if (xgifb_info->TV_type == TVMODE_NTSC) { + xgifb_reg_and(XGIPART2, 0x3a, 0x1f); - } else if (xgifb_info->TV_type == TVMODE_PAL) { - xgifb_reg_and(XGIPART2, 0x3A, 0x1F); - - if (xgifb_info->TV_plug == TVPLUG_SVIDEO) { - xgifb_reg_and(XGIPART2, 0x30, 0xDF); - - } else if (xgifb_info->TV_plug - == TVPLUG_COMPOSITE) { - xgifb_reg_or(XGIPART2, 0x30, 0x20); - - switch (xgifb_info->video_width) { - case 640: - xgifb_reg_set(XGIPART2, - 0x35, - 0xF1); - xgifb_reg_set(XGIPART2, - 0x36, - 0xF7); - xgifb_reg_set(XGIPART2, - 0x37, - 0x1F); - xgifb_reg_set(XGIPART2, - 0x38, - 0x32); - break; - case 720: - xgifb_reg_set(XGIPART2, - 0x35, - 0xF3); - xgifb_reg_set(XGIPART2, - 0x36, - 0x00); - xgifb_reg_set(XGIPART2, - 0x37, - 0x1D); - xgifb_reg_set(XGIPART2, - 0x38, - 0x20); - break; - case 800: - xgifb_reg_set(XGIPART2, - 0x35, - 0xFC); - xgifb_reg_set(XGIPART2, - 0x36, - 0xFB); - xgifb_reg_set(XGIPART2, - 0x37, - 0x14); - xgifb_reg_set(XGIPART2, - 0x38, - 0x2A); - break; - } + if (xgifb_info->TV_plug == TVPLUG_SVIDEO) { + xgifb_reg_and(XGIPART2, 0x30, 0xdf); + + } else if (xgifb_info->TV_plug == TVPLUG_COMPOSITE) { + xgifb_reg_or(XGIPART2, 0x30, 0x20); + + switch (xgifb_info->video_width) { + case 640: + xgifb_reg_set(XGIPART2, 0x35, 0xEB); + xgifb_reg_set(XGIPART2, 0x36, 0x04); + xgifb_reg_set(XGIPART2, 0x37, 0x25); + xgifb_reg_set(XGIPART2, 0x38, 0x18); + break; + case 720: + xgifb_reg_set(XGIPART2, 0x35, 0xEE); + xgifb_reg_set(XGIPART2, 0x36, 0x0C); + xgifb_reg_set(XGIPART2, 0x37, 0x22); + xgifb_reg_set(XGIPART2, 0x38, 0x08); + break; + case 800: + xgifb_reg_set(XGIPART2, 0x35, 0xEB); + xgifb_reg_set(XGIPART2, 0x36, 0x15); + xgifb_reg_set(XGIPART2, 0x37, 0x25); + xgifb_reg_set(XGIPART2, 0x38, 0xF6); + break; } } - if ((filter >= 0) && (filter <= 7)) { - pr_debug("FilterTable[%d]-%d: %*ph\n", - filter_tb, filter, - 4, XGI_TV_filter[filter_tb]. - filter[filter]); - xgifb_reg_set( - XGIPART2, - 0x35, - (XGI_TV_filter[filter_tb]. - filter[filter][0])); - xgifb_reg_set( - XGIPART2, - 0x36, - (XGI_TV_filter[filter_tb]. - filter[filter][1])); - xgifb_reg_set( - XGIPART2, - 0x37, - (XGI_TV_filter[filter_tb]. - filter[filter][2])); - xgifb_reg_set( - XGIPART2, - 0x38, - (XGI_TV_filter[filter_tb]. - filter[filter][3])); + } else if (xgifb_info->TV_type == TVMODE_PAL) { + xgifb_reg_and(XGIPART2, 0x3A, 0x1F); + + if (xgifb_info->TV_plug == TVPLUG_SVIDEO) { + xgifb_reg_and(XGIPART2, 0x30, 0xDF); + + } else if (xgifb_info->TV_plug == TVPLUG_COMPOSITE) { + xgifb_reg_or(XGIPART2, 0x30, 0x20); + + switch (xgifb_info->video_width) { + case 640: + xgifb_reg_set(XGIPART2, 0x35, 0xF1); + xgifb_reg_set(XGIPART2, 0x36, 0xF7); + xgifb_reg_set(XGIPART2, 0x37, 0x1F); + xgifb_reg_set(XGIPART2, 0x38, 0x32); + break; + case 720: + xgifb_reg_set(XGIPART2, 0x35, 0xF3); + xgifb_reg_set(XGIPART2, 0x36, 0x00); + xgifb_reg_set(XGIPART2, 0x37, 0x1D); + xgifb_reg_set(XGIPART2, 0x38, 0x20); + break; + case 800: + xgifb_reg_set(XGIPART2, 0x35, 0xFC); + xgifb_reg_set(XGIPART2, 0x36, 0xFB); + xgifb_reg_set(XGIPART2, 0x37, 0x14); + xgifb_reg_set(XGIPART2, 0x38, 0x2A); + break; + } } } + + if (filter >= 0 && filter <= 7) { + const u8 *f = XGI_TV_filter[filter_tb].filter[filter]; + + pr_debug("FilterTable[%d]-%d: %*ph\n", + filter_tb, filter, 4, f); + xgifb_reg_set(XGIPART2, 0x35, f[0]); + xgifb_reg_set(XGIPART2, 0x36, f[1]); + xgifb_reg_set(XGIPART2, 0x37, f[2]); + xgifb_reg_set(XGIPART2, 0x38, f[3]); + } } }