Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

viafb: split global index up

This is the first step to remove an artificial global index that was used
in two ways:

1. As a pseudo index in the mode table. Pseudo as you had to search
through the table to find the referenced entry. This was replaced by
using a pointer to the entry.

2. As a shortcut to compare a combination of horizontal and vertical
resolution at the same time.

This was replaced by a "(hres<<16) | vres" which is good enough for
now and the near future. If vres or hres become greater than 2^16 this
might indeed cause problems but this solution allows to split this
indexing mess up without the requirement to do even more code changes.

This is a big change that will allow more clean ups. It should be a bit
faster but that is probably not relevant for normal operation. No
regressions expected but as this is a relatively big step heavy testing is
appreciated.

Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
Cc: Joseph Chan <JosephChan@via.com.tw>
Cc: Scott Fang <ScottFang@viatech.com.cn>
Cc: Krzysztof Helt <krzysztof.h1@poczta.fm>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Florian Tobias Schandinat and committed by
Linus Torvalds
dd73d686 2365dfe9

+225 -386
+10 -46
drivers/video/via/dvi.c
··· 23 23 static void tmds_register_write(int index, u8 data); 24 24 static int tmds_register_read(int index); 25 25 static int tmds_register_read_bytes(int index, u8 *buff, int buff_len); 26 - static int check_reduce_blanking_mode(int mode_index, 27 - int refresh_rate); 28 26 static int dvi_get_panel_size_from_DDCv1(void); 29 27 static int dvi_get_panel_size_from_DDCv2(void); 30 28 static unsigned char dvi_get_panel_info(void); ··· 187 189 return 0; 188 190 } 189 191 190 - static int check_reduce_blanking_mode(int mode_index, 191 - int refresh_rate) 192 - { 193 - if (refresh_rate != 60) 194 - return false; 195 - 196 - switch (mode_index) { 197 - /* Following modes have reduce blanking mode. */ 198 - case VIA_RES_1360X768: 199 - case VIA_RES_1400X1050: 200 - case VIA_RES_1440X900: 201 - case VIA_RES_1600X900: 202 - case VIA_RES_1680X1050: 203 - case VIA_RES_1920X1080: 204 - case VIA_RES_1920X1200: 205 - break; 206 - 207 - default: 208 - DEBUG_MSG(KERN_INFO 209 - "This dvi mode %d have no reduce blanking mode!\n", 210 - mode_index); 211 - return false; 212 - } 213 - 214 - return true; 215 - } 216 - 217 192 /* DVI Set Mode */ 218 - void viafb_dvi_set_mode(int video_index, int mode_bpp, int set_iga) 193 + void viafb_dvi_set_mode(struct VideoModeTable *mode, int mode_bpp, 194 + int set_iga) 219 195 { 220 - struct VideoModeTable *videoMode = NULL; 196 + struct VideoModeTable *rb_mode; 221 197 struct crt_mode_table *pDviTiming; 222 198 unsigned long desirePixelClock, maxPixelClock; 223 - int status = 0; 224 - videoMode = viafb_get_modetbl_pointer(video_index); 225 - pDviTiming = videoMode->crtc; 199 + pDviTiming = mode->crtc; 226 200 desirePixelClock = pDviTiming->clk / 1000000; 227 201 maxPixelClock = (unsigned long)viaparinfo-> 228 202 tmds_setting_info->max_pixel_clock; ··· 202 232 DEBUG_MSG(KERN_INFO "\nDVI_set_mode!!\n"); 203 233 204 234 if ((maxPixelClock != 0) && (desirePixelClock > maxPixelClock)) { 205 - /*Check if reduce-blanking mode is exist */ 206 - status = 207 - check_reduce_blanking_mode(video_index, 208 - pDviTiming->refresh_rate); 209 - if (status) { 210 - video_index += 100; /*Use reduce-blanking mode */ 211 - videoMode = viafb_get_modetbl_pointer(video_index); 212 - pDviTiming = videoMode->crtc; 213 - DEBUG_MSG(KERN_INFO 214 - "DVI use reduce blanking mode %d!!\n", 215 - video_index); 235 + rb_mode = viafb_get_rb_mode(mode->crtc[0].crtc.hor_addr, 236 + mode->crtc[0].crtc.ver_addr); 237 + if (rb_mode) { 238 + mode = rb_mode; 239 + pDviTiming = rb_mode->crtc; 216 240 } 217 241 } 218 - viafb_fill_crtc_timing(pDviTiming, video_index, mode_bpp / 8, set_iga); 242 + viafb_fill_crtc_timing(pDviTiming, mode, mode_bpp / 8, set_iga); 219 243 viafb_set_output_path(DEVICE_DVI, set_iga, 220 244 viaparinfo->chip_info->tmds_chip_info.output_interface); 221 245 }
+2 -2
drivers/video/via/dvi.h
··· 53 53 #define DEV_CONNECT_DVI 0x01 54 54 #define DEV_CONNECT_HDMI 0x02 55 55 56 - struct VideoModeTable *viafb_get_cea_mode_tbl_pointer(int Index); 57 56 int viafb_dvi_sense(void); 58 57 void viafb_dvi_disable(void); 59 58 void viafb_dvi_enable(void); 60 59 int viafb_tmds_trasmitter_identify(void); 61 60 void viafb_init_dvi_size(void); 62 - void viafb_dvi_set_mode(int video_index, int mode_bpp, int set_iga); 61 + void viafb_dvi_set_mode(struct VideoModeTable *videoMode, int mode_bpp, 62 + int set_iga); 63 63 64 64 #endif /* __DVI_H__ */
+26 -125
drivers/video/via/hw.c
··· 524 524 static void dvi_patch_skew_dvp_low(void); 525 525 static void set_dvi_output_path(int set_iga, int output_interface); 526 526 static void set_lcd_output_path(int set_iga, int output_interface); 527 - static int search_mode_setting(int ModeInfoIndex); 528 527 static void load_fix_bit_crtc_reg(void); 529 528 static void init_gfx_chip_info(struct pci_dev *pdev, 530 529 const struct pci_device_id *pdi); ··· 984 985 viafb_write_reg_mask(CR97, VIACR, 0x10, BIT4); 985 986 break; 986 987 } 987 - } 988 - 989 - /* Search Mode Index */ 990 - static int search_mode_setting(int ModeInfoIndex) 991 - { 992 - int i = 0; 993 - 994 - while ((i < NUM_TOTAL_MODETABLE) && 995 - (ModeInfoIndex != CLE266Modes[i].ModeIndex)) 996 - i++; 997 - if (i >= NUM_TOTAL_MODETABLE) 998 - i = 0; 999 - return i; 1000 - 1001 - } 1002 - 1003 - struct VideoModeTable *viafb_get_modetbl_pointer(int Index) 1004 - { 1005 - struct VideoModeTable *TmpTbl = NULL; 1006 - TmpTbl = &CLE266Modes[search_mode_setting(Index)]; 1007 - return TmpTbl; 1008 - } 1009 - 1010 - struct VideoModeTable *viafb_get_cea_mode_tbl_pointer(int Index) 1011 - { 1012 - struct VideoModeTable *TmpTbl = NULL; 1013 - int i = 0; 1014 - while ((i < NUM_TOTAL_CEA_MODES) && 1015 - (Index != CEA_HDMI_Modes[i].ModeIndex)) 1016 - i++; 1017 - if ((i < NUM_TOTAL_CEA_MODES)) 1018 - TmpTbl = &CEA_HDMI_Modes[i]; 1019 - else { 1020 - /*Still use general timing if don't find CEA timing */ 1021 - i = 0; 1022 - while ((i < NUM_TOTAL_MODETABLE) && 1023 - (Index != CLE266Modes[i].ModeIndex)) 1024 - i++; 1025 - if (i >= NUM_TOTAL_MODETABLE) 1026 - i = 0; 1027 - TmpTbl = &CLE266Modes[i]; 1028 - } 1029 - return TmpTbl; 1030 988 } 1031 989 1032 990 static void load_fix_bit_crtc_reg(void) ··· 1791 1835 } 1792 1836 1793 1837 void viafb_fill_crtc_timing(struct crt_mode_table *crt_table, 1794 - int mode_index, int bpp_byte, int set_iga) 1838 + struct VideoModeTable *video_mode, int bpp_byte, int set_iga) 1795 1839 { 1796 - struct VideoModeTable *video_mode; 1797 1840 struct display_timing crt_reg; 1798 1841 int i; 1799 1842 int index = 0; 1800 1843 int h_addr, v_addr; 1801 1844 u32 pll_D_N; 1802 - 1803 - video_mode = &CLE266Modes[search_mode_setting(mode_index)]; 1804 1845 1805 1846 for (i = 0; i < video_mode->mode_array; i++) { 1806 1847 index = i; ··· 1811 1858 1812 1859 /* Mode 640x480 has border, but LCD/DFP didn't have border. */ 1813 1860 /* So we would delete border. */ 1814 - if ((viafb_LCD_ON | viafb_DVI_ON) && (mode_index == VIA_RES_640X480) 1815 - && (viaparinfo->crt_setting_info->refresh_rate == 60)) { 1861 + if ((viafb_LCD_ON | viafb_DVI_ON) 1862 + && video_mode->crtc[0].crtc.hor_addr == 640 1863 + && video_mode->crtc[0].crtc.ver_addr == 480 1864 + && viaparinfo->crt_setting_info->refresh_rate == 60) { 1816 1865 /* The border is 8 pixels. */ 1817 1866 crt_reg.hor_blank_start = crt_reg.hor_blank_start - 8; 1818 1867 ··· 2150 2195 } 2151 2196 } 2152 2197 2153 - int viafb_setmode(int vmode_index, int hor_res, int ver_res, int video_bpp, 2154 - int vmode_index1, int hor_res1, int ver_res1, int video_bpp1) 2198 + int viafb_setmode(struct VideoModeTable *vmode_tbl, int video_bpp, 2199 + struct VideoModeTable *vmode_tbl1, int video_bpp1) 2155 2200 { 2156 2201 int i, j; 2157 2202 int port; 2158 2203 u8 value, index, mask; 2159 - struct VideoModeTable *vmode_tbl; 2160 2204 struct crt_mode_table *crt_timing; 2161 - struct VideoModeTable *vmode_tbl1 = NULL; 2162 2205 struct crt_mode_table *crt_timing1 = NULL; 2163 2206 2164 - DEBUG_MSG(KERN_INFO "Set Mode!!\n"); 2165 - DEBUG_MSG(KERN_INFO 2166 - "vmode_index=%d hor_res=%d ver_res=%d video_bpp=%d\n", 2167 - vmode_index, hor_res, ver_res, video_bpp); 2168 - 2169 2207 device_screen_off(); 2170 - vmode_tbl = &CLE266Modes[search_mode_setting(vmode_index)]; 2171 2208 crt_timing = vmode_tbl->crtc; 2172 2209 2173 2210 if (viafb_SAMM_ON == 1) { 2174 - vmode_tbl1 = &CLE266Modes[search_mode_setting(vmode_index1)]; 2175 2211 crt_timing1 = vmode_tbl1->crtc; 2176 2212 } 2177 2213 ··· 2218 2272 viafb_set_iga_path(); 2219 2273 2220 2274 /* Write CRTC */ 2221 - viafb_fill_crtc_timing(crt_timing, vmode_index, video_bpp / 8, IGA1); 2275 + viafb_fill_crtc_timing(crt_timing, vmode_tbl, video_bpp / 8, IGA1); 2222 2276 2223 2277 /* Write Graphic Controller */ 2224 2278 for (i = 0; i < StdGR; i++) { ··· 2238 2292 2239 2293 /* Update Patch Register */ 2240 2294 2241 - if ((viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266) 2242 - || (viaparinfo->chip_info->gfx_chip_name == UNICHROME_K400)) { 2243 - for (i = 0; i < NUM_TOTAL_PATCH_MODE; i++) { 2244 - if (res_patch_table[i].mode_index == vmode_index) { 2245 - for (j = 0; 2246 - j < res_patch_table[i].table_length; j++) { 2247 - index = 2248 - res_patch_table[i]. 2249 - io_reg_table[j].index; 2250 - port = 2251 - res_patch_table[i]. 2252 - io_reg_table[j].port; 2253 - value = 2254 - res_patch_table[i]. 2255 - io_reg_table[j].value; 2256 - mask = 2257 - res_patch_table[i]. 2258 - io_reg_table[j].mask; 2259 - viafb_write_reg_mask(index, port, value, 2260 - mask); 2261 - } 2262 - } 2263 - } 2264 - } 2265 - 2266 - if (viafb_SAMM_ON == 1) { 2267 - if ((viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266) 2268 - || (viaparinfo->chip_info->gfx_chip_name == 2269 - UNICHROME_K400)) { 2270 - for (i = 0; i < NUM_TOTAL_PATCH_MODE; i++) { 2271 - if (res_patch_table[i].mode_index == 2272 - vmode_index1) { 2273 - for (j = 0; 2274 - j < 2275 - res_patch_table[i]. 2276 - table_length; j++) { 2277 - index = 2278 - res_patch_table[i]. 2279 - io_reg_table[j].index; 2280 - port = 2281 - res_patch_table[i]. 2282 - io_reg_table[j].port; 2283 - value = 2284 - res_patch_table[i]. 2285 - io_reg_table[j].value; 2286 - mask = 2287 - res_patch_table[i]. 2288 - io_reg_table[j].mask; 2289 - viafb_write_reg_mask(index, 2290 - port, value, mask); 2291 - } 2292 - } 2293 - } 2295 + if ((viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266 2296 + || viaparinfo->chip_info->gfx_chip_name == UNICHROME_K400) 2297 + && vmode_tbl->crtc[0].crtc.hor_addr == 1024 2298 + && vmode_tbl->crtc[0].crtc.ver_addr == 768) { 2299 + for (j = 0; j < res_patch_table[0].table_length; j++) { 2300 + index = res_patch_table[0].io_reg_table[j].index; 2301 + port = res_patch_table[0].io_reg_table[j].port; 2302 + value = res_patch_table[0].io_reg_table[j].value; 2303 + mask = res_patch_table[0].io_reg_table[j].mask; 2304 + viafb_write_reg_mask(index, port, value, mask); 2294 2305 } 2295 2306 } 2296 2307 ··· 2262 2359 if (viafb_CRT_ON) { 2263 2360 if (viafb_SAMM_ON && (viaparinfo->crt_setting_info->iga_path == 2264 2361 IGA2)) { 2265 - viafb_fill_crtc_timing(crt_timing1, vmode_index1, 2362 + viafb_fill_crtc_timing(crt_timing1, vmode_tbl1, 2266 2363 video_bpp1 / 8, 2267 2364 viaparinfo->crt_setting_info->iga_path); 2268 2365 } else { 2269 - viafb_fill_crtc_timing(crt_timing, vmode_index, 2366 + viafb_fill_crtc_timing(crt_timing, vmode_tbl, 2270 2367 video_bpp / 8, 2271 2368 viaparinfo->crt_setting_info->iga_path); 2272 2369 } ··· 2276 2373 /* Patch if set_hres is not 8 alignment (1366) to viafb_setmode 2277 2374 to 8 alignment (1368),there is several pixels (2 pixels) 2278 2375 on right side of screen. */ 2279 - if (hor_res % 8) { 2376 + if (vmode_tbl->crtc[0].crtc.hor_addr % 8) { 2280 2377 viafb_unlock_crt(); 2281 2378 viafb_write_reg(CR02, VIACR, 2282 2379 viafb_read_reg(VIACR, CR02) - 1); ··· 2287 2384 if (viafb_DVI_ON) { 2288 2385 if (viafb_SAMM_ON && 2289 2386 (viaparinfo->tmds_setting_info->iga_path == IGA2)) { 2290 - viafb_dvi_set_mode(viafb_get_mode_index 2387 + viafb_dvi_set_mode(viafb_get_mode 2291 2388 (viaparinfo->tmds_setting_info->h_active, 2292 2389 viaparinfo->tmds_setting_info-> 2293 2390 v_active), 2294 2391 video_bpp1, viaparinfo-> 2295 2392 tmds_setting_info->iga_path); 2296 2393 } else { 2297 - viafb_dvi_set_mode(viafb_get_mode_index 2394 + viafb_dvi_set_mode(viafb_get_mode 2298 2395 (viaparinfo->tmds_setting_info->h_active, 2299 2396 viaparinfo-> 2300 2397 tmds_setting_info->v_active), ··· 2348 2445 2349 2446 /* If set mode normally, save resolution information for hot-plug . */ 2350 2447 if (!viafb_hotplug) { 2351 - viafb_hotplug_Xres = hor_res; 2352 - viafb_hotplug_Yres = ver_res; 2448 + viafb_hotplug_Xres = vmode_tbl->crtc[0].crtc.hor_addr; 2449 + viafb_hotplug_Yres = vmode_tbl->crtc[0].crtc.ver_addr; 2353 2450 viafb_hotplug_bpp = video_bpp; 2354 2451 viafb_hotplug_refresh = viafb_refresh; 2355 2452 ··· 2609 2706 2610 2707 /*According var's xres, yres fill var's other timing information*/ 2611 2708 void viafb_fill_var_timing_info(struct fb_var_screeninfo *var, int refresh, 2612 - int mode_index) 2709 + struct VideoModeTable *vmode_tbl) 2613 2710 { 2614 - struct VideoModeTable *vmode_tbl = NULL; 2615 2711 struct crt_mode_table *crt_timing = NULL; 2616 2712 struct display_timing crt_reg; 2617 2713 int i = 0, index = 0; 2618 - vmode_tbl = &CLE266Modes[search_mode_setting(mode_index)]; 2619 2714 crt_timing = vmode_tbl->crtc; 2620 2715 for (i = 0; i < vmode_tbl->mode_array; i++) { 2621 2716 index = i;
+7 -5
drivers/video/via/hw.h
··· 22 22 #ifndef __HW_H__ 23 23 #define __HW_H__ 24 24 25 + #include "viamode.h" 25 26 #include "global.h" 26 27 27 28 /*************************************************** ··· 875 874 void viafb_write_reg_mask(u8 index, int io_port, u8 data, u8 mask); 876 875 void viafb_set_output_path(int device, int set_iga, 877 876 int output_interface); 877 + 878 878 void viafb_fill_crtc_timing(struct crt_mode_table *crt_table, 879 - int mode_index, int bpp_byte, int set_iga); 879 + struct VideoModeTable *video_mode, int bpp_byte, int set_iga); 880 880 881 881 void viafb_set_vclock(u32 CLK, int set_iga); 882 882 void viafb_load_reg(int timing_value, int viafb_load_reg_num, ··· 893 891 void viafb_unlock_crt(void); 894 892 void viafb_load_fetch_count_reg(int h_addr, int bpp_byte, int set_iga); 895 893 void viafb_write_regx(struct io_reg RegTable[], int ItemNum); 896 - struct VideoModeTable *viafb_get_modetbl_pointer(int Index); 897 894 u32 viafb_get_clk_value(int clk); 898 895 void viafb_load_FIFO_reg(int set_iga, int hor_active, int ver_active); 899 896 void viafb_set_color_depth(int bpp_byte, int set_iga); 900 897 void viafb_set_dpa_gfx(int output_interface, struct GFX_DPA_SETTING\ 901 898 *p_gfx_dpa_setting); 902 899 903 - int viafb_setmode(int vmode_index, int hor_res, int ver_res, 904 - int video_bpp, int vmode_index1, int hor_res1, 905 - int ver_res1, int video_bpp1); 900 + int viafb_setmode(struct VideoModeTable *vmode_tbl, int video_bpp, 901 + struct VideoModeTable *vmode_tbl1, int video_bpp1); 902 + void viafb_fill_var_timing_info(struct fb_var_screeninfo *var, int refresh, 903 + struct VideoModeTable *vmode_tbl); 906 904 void viafb_init_chip_info(struct pci_dev *pdev, 907 905 const struct pci_device_id *pdi); 908 906 void viafb_init_dac(int set_iga);
+70 -78
drivers/video/via/lcd.c
··· 22 22 #include "global.h" 23 23 #include "lcdtbl.h" 24 24 25 + #define viafb_compact_res(x, y) (((x)<<16)|(y)) 26 + 25 27 static struct iga2_shadow_crtc_timing iga2_shadow_crtc_reg = { 26 28 /* IGA2 Shadow Horizontal Total */ 27 29 {IGA2_SHADOW_HOR_TOTAL_REG_NUM, {{CR6D, 0, 7}, {CR71, 3, 3} } }, ··· 578 576 static void load_lcd_k400_patch_tbl(int set_hres, int set_vres, 579 577 int panel_id) 580 578 { 581 - int vmode_index; 579 + u32 compact_mode = viafb_compact_res(set_hres, set_vres); 582 580 int reg_num = 0; 583 581 struct io_reg *lcd_patch_reg = NULL; 584 582 585 - vmode_index = viafb_get_mode_index(set_hres, set_vres); 586 583 switch (panel_id) { 587 584 /* LCD 800x600 */ 588 585 case LCD_PANEL_ID1_800X600: 589 - switch (vmode_index) { 590 - case VIA_RES_640X400: 591 - case VIA_RES_640X480: 586 + switch (compact_mode) { 587 + case viafb_compact_res(640, 400): 588 + case viafb_compact_res(640, 480): 592 589 reg_num = NUM_TOTAL_K400_LCD_RES_6X4_8X6; 593 590 lcd_patch_reg = K400_LCD_RES_6X4_8X6; 594 591 break; 595 - case VIA_RES_720X480: 596 - case VIA_RES_720X576: 592 + case viafb_compact_res(720, 480): 593 + case viafb_compact_res(720, 576): 597 594 reg_num = NUM_TOTAL_K400_LCD_RES_7X4_8X6; 598 595 lcd_patch_reg = K400_LCD_RES_7X4_8X6; 599 596 break; ··· 601 600 602 601 /* LCD 1024x768 */ 603 602 case LCD_PANEL_ID2_1024X768: 604 - switch (vmode_index) { 605 - case VIA_RES_640X400: 606 - case VIA_RES_640X480: 603 + switch (compact_mode) { 604 + case viafb_compact_res(640, 400): 605 + case viafb_compact_res(640, 480): 607 606 reg_num = NUM_TOTAL_K400_LCD_RES_6X4_10X7; 608 607 lcd_patch_reg = K400_LCD_RES_6X4_10X7; 609 608 break; 610 - case VIA_RES_720X480: 611 - case VIA_RES_720X576: 609 + case viafb_compact_res(720, 480): 610 + case viafb_compact_res(720, 576): 612 611 reg_num = NUM_TOTAL_K400_LCD_RES_7X4_10X7; 613 612 lcd_patch_reg = K400_LCD_RES_7X4_10X7; 614 613 break; 615 - case VIA_RES_800X600: 614 + case viafb_compact_res(800, 600): 616 615 reg_num = NUM_TOTAL_K400_LCD_RES_8X6_10X7; 617 616 lcd_patch_reg = K400_LCD_RES_8X6_10X7; 618 617 break; ··· 621 620 622 621 /* LCD 1280x1024 */ 623 622 case LCD_PANEL_ID4_1280X1024: 624 - switch (vmode_index) { 625 - case VIA_RES_640X400: 626 - case VIA_RES_640X480: 623 + switch (compact_mode) { 624 + case viafb_compact_res(640, 400): 625 + case viafb_compact_res(640, 480): 627 626 reg_num = NUM_TOTAL_K400_LCD_RES_6X4_12X10; 628 627 lcd_patch_reg = K400_LCD_RES_6X4_12X10; 629 628 break; 630 - case VIA_RES_720X480: 631 - case VIA_RES_720X576: 629 + case viafb_compact_res(720, 480): 630 + case viafb_compact_res(720, 576): 632 631 reg_num = NUM_TOTAL_K400_LCD_RES_7X4_12X10; 633 632 lcd_patch_reg = K400_LCD_RES_7X4_12X10; 634 633 break; 635 - case VIA_RES_800X600: 634 + case viafb_compact_res(800, 600): 636 635 reg_num = NUM_TOTAL_K400_LCD_RES_8X6_12X10; 637 636 lcd_patch_reg = K400_LCD_RES_8X6_12X10; 638 637 break; 639 - case VIA_RES_1024X768: 638 + case viafb_compact_res(1024, 768): 640 639 reg_num = NUM_TOTAL_K400_LCD_RES_10X7_12X10; 641 640 lcd_patch_reg = K400_LCD_RES_10X7_12X10; 642 641 break; ··· 646 645 647 646 /* LCD 1400x1050 */ 648 647 case LCD_PANEL_ID5_1400X1050: 649 - switch (vmode_index) { 650 - case VIA_RES_640X480: 648 + switch (compact_mode) { 649 + case viafb_compact_res(640, 480): 651 650 reg_num = NUM_TOTAL_K400_LCD_RES_6X4_14X10; 652 651 lcd_patch_reg = K400_LCD_RES_6X4_14X10; 653 652 break; 654 - case VIA_RES_800X600: 653 + case viafb_compact_res(800, 600): 655 654 reg_num = NUM_TOTAL_K400_LCD_RES_8X6_14X10; 656 655 lcd_patch_reg = K400_LCD_RES_8X6_14X10; 657 656 break; 658 - case VIA_RES_1024X768: 657 + case viafb_compact_res(1024, 768): 659 658 reg_num = NUM_TOTAL_K400_LCD_RES_10X7_14X10; 660 659 lcd_patch_reg = K400_LCD_RES_10X7_14X10; 661 660 break; 662 - case VIA_RES_1280X768: 663 - case VIA_RES_1280X800: 664 - case VIA_RES_1280X960: 665 - case VIA_RES_1280X1024: 661 + case viafb_compact_res(1280, 768): 662 + case viafb_compact_res(1280, 800): 663 + case viafb_compact_res(1280, 960): 664 + case viafb_compact_res(1280, 1024): 666 665 reg_num = NUM_TOTAL_K400_LCD_RES_12X10_14X10; 667 666 lcd_patch_reg = K400_LCD_RES_12X10_14X10; 668 667 break; ··· 671 670 672 671 /* LCD 1600x1200 */ 673 672 case LCD_PANEL_ID6_1600X1200: 674 - switch (vmode_index) { 675 - case VIA_RES_640X400: 676 - case VIA_RES_640X480: 673 + switch (compact_mode) { 674 + case viafb_compact_res(640, 400): 675 + case viafb_compact_res(640, 480): 677 676 reg_num = NUM_TOTAL_K400_LCD_RES_6X4_16X12; 678 677 lcd_patch_reg = K400_LCD_RES_6X4_16X12; 679 678 break; 680 - case VIA_RES_720X480: 681 - case VIA_RES_720X576: 679 + case viafb_compact_res(720, 480): 680 + case viafb_compact_res(720, 576): 682 681 reg_num = NUM_TOTAL_K400_LCD_RES_7X4_16X12; 683 682 lcd_patch_reg = K400_LCD_RES_7X4_16X12; 684 683 break; 685 - case VIA_RES_800X600: 684 + case viafb_compact_res(800, 600): 686 685 reg_num = NUM_TOTAL_K400_LCD_RES_8X6_16X12; 687 686 lcd_patch_reg = K400_LCD_RES_8X6_16X12; 688 687 break; 689 - case VIA_RES_1024X768: 688 + case viafb_compact_res(1024, 768): 690 689 reg_num = NUM_TOTAL_K400_LCD_RES_10X7_16X12; 691 690 lcd_patch_reg = K400_LCD_RES_10X7_16X12; 692 691 break; 693 - case VIA_RES_1280X768: 694 - case VIA_RES_1280X800: 695 - case VIA_RES_1280X960: 696 - case VIA_RES_1280X1024: 692 + case viafb_compact_res(1280, 768): 693 + case viafb_compact_res(1280, 800): 694 + case viafb_compact_res(1280, 960): 695 + case viafb_compact_res(1280, 1024): 697 696 reg_num = NUM_TOTAL_K400_LCD_RES_12X10_16X12; 698 697 lcd_patch_reg = K400_LCD_RES_12X10_16X12; 699 698 break; ··· 702 701 703 702 /* LCD 1366x768 */ 704 703 case LCD_PANEL_ID7_1366X768: 705 - switch (vmode_index) { 706 - case VIA_RES_640X480: 704 + switch (compact_mode) { 705 + case viafb_compact_res(640, 480): 707 706 reg_num = NUM_TOTAL_K400_LCD_RES_6X4_1366X7; 708 707 lcd_patch_reg = K400_LCD_RES_6X4_1366X7; 709 708 break; 710 - case VIA_RES_720X480: 711 - case VIA_RES_720X576: 709 + case viafb_compact_res(720, 480): 710 + case viafb_compact_res(720, 576): 712 711 reg_num = NUM_TOTAL_K400_LCD_RES_7X4_1366X7; 713 712 lcd_patch_reg = K400_LCD_RES_7X4_1366X7; 714 713 break; 715 - case VIA_RES_800X600: 714 + case viafb_compact_res(800, 600): 716 715 reg_num = NUM_TOTAL_K400_LCD_RES_8X6_1366X7; 717 716 lcd_patch_reg = K400_LCD_RES_8X6_1366X7; 718 717 break; 719 - case VIA_RES_1024X768: 718 + case viafb_compact_res(1024, 768): 720 719 reg_num = NUM_TOTAL_K400_LCD_RES_10X7_1366X7; 721 720 lcd_patch_reg = K400_LCD_RES_10X7_1366X7; 722 721 break; 723 - case VIA_RES_1280X768: 724 - case VIA_RES_1280X800: 725 - case VIA_RES_1280X960: 726 - case VIA_RES_1280X1024: 722 + case viafb_compact_res(1280, 768): 723 + case viafb_compact_res(1280, 800): 724 + case viafb_compact_res(1280, 960): 725 + case viafb_compact_res(1280, 1024): 727 726 reg_num = NUM_TOTAL_K400_LCD_RES_12X10_1366X7; 728 727 lcd_patch_reg = K400_LCD_RES_12X10_1366X7; 729 728 break; ··· 755 754 static void load_lcd_p880_patch_tbl(int set_hres, int set_vres, 756 755 int panel_id) 757 756 { 758 - int vmode_index; 757 + u32 compact_mode = viafb_compact_res(set_hres, set_vres); 759 758 int reg_num = 0; 760 759 struct io_reg *lcd_patch_reg = NULL; 761 760 762 - vmode_index = viafb_get_mode_index(set_hres, set_vres); 763 - 764 761 switch (panel_id) { 765 762 case LCD_PANEL_ID5_1400X1050: 766 - switch (vmode_index) { 767 - case VIA_RES_640X480: 763 + switch (compact_mode) { 764 + case viafb_compact_res(640, 480): 768 765 reg_num = NUM_TOTAL_P880_LCD_RES_6X4_14X10; 769 766 lcd_patch_reg = P880_LCD_RES_6X4_14X10; 770 767 break; 771 - case VIA_RES_800X600: 768 + case viafb_compact_res(800, 600): 772 769 reg_num = NUM_TOTAL_P880_LCD_RES_8X6_14X10; 773 770 lcd_patch_reg = P880_LCD_RES_8X6_14X10; 774 771 break; 775 772 } 776 773 break; 777 774 case LCD_PANEL_ID6_1600X1200: 778 - switch (vmode_index) { 779 - case VIA_RES_640X400: 780 - case VIA_RES_640X480: 775 + switch (compact_mode) { 776 + case viafb_compact_res(640, 400): 777 + case viafb_compact_res(640, 480): 781 778 reg_num = NUM_TOTAL_P880_LCD_RES_6X4_16X12; 782 779 lcd_patch_reg = P880_LCD_RES_6X4_16X12; 783 780 break; 784 - case VIA_RES_720X480: 785 - case VIA_RES_720X576: 781 + case viafb_compact_res(720, 480): 782 + case viafb_compact_res(720, 576): 786 783 reg_num = NUM_TOTAL_P880_LCD_RES_7X4_16X12; 787 784 lcd_patch_reg = P880_LCD_RES_7X4_16X12; 788 785 break; 789 - case VIA_RES_800X600: 786 + case viafb_compact_res(800, 600): 790 787 reg_num = NUM_TOTAL_P880_LCD_RES_8X6_16X12; 791 788 lcd_patch_reg = P880_LCD_RES_8X6_16X12; 792 789 break; 793 - case VIA_RES_1024X768: 790 + case viafb_compact_res(1024, 768): 794 791 reg_num = NUM_TOTAL_P880_LCD_RES_10X7_16X12; 795 792 lcd_patch_reg = P880_LCD_RES_10X7_16X12; 796 793 break; 797 - case VIA_RES_1280X768: 798 - case VIA_RES_1280X960: 799 - case VIA_RES_1280X1024: 794 + case viafb_compact_res(1280, 768): 795 + case viafb_compact_res(1280, 960): 796 + case viafb_compact_res(1280, 1024): 800 797 reg_num = NUM_TOTAL_P880_LCD_RES_12X10_16X12; 801 798 lcd_patch_reg = P880_LCD_RES_12X10_16X12; 802 799 break; ··· 823 824 static void load_lcd_patch_regs(int set_hres, int set_vres, 824 825 int panel_id, int set_iga) 825 826 { 826 - int vmode_index; 827 - 828 - vmode_index = viafb_get_mode_index(set_hres, set_vres); 829 - 830 827 viafb_unlock_crt(); 831 828 832 829 /* Patch for simultaneous & Expansion */ ··· 944 949 struct lvds_setting_information *plvds_setting_info, 945 950 struct lvds_chip_information *plvds_chip_info) 946 951 { 947 - int video_index = plvds_setting_info->lcd_panel_size; 948 952 int set_iga = plvds_setting_info->iga_path; 949 953 int mode_bpp = plvds_setting_info->bpp; 950 - int set_hres, set_vres; 951 - int panel_hres, panel_vres; 954 + int set_hres = plvds_setting_info->h_active; 955 + int set_vres = plvds_setting_info->v_active; 956 + int panel_hres = plvds_setting_info->lcd_panel_hres; 957 + int panel_vres = plvds_setting_info->lcd_panel_vres; 952 958 u32 pll_D_N; 953 959 int offset; 954 960 struct display_timing mode_crt_reg, panel_crt_reg; 955 961 struct crt_mode_table *panel_crt_table = NULL; 956 - struct VideoModeTable *vmode_tbl = NULL; 962 + struct VideoModeTable *vmode_tbl = viafb_get_mode(panel_hres, 963 + panel_vres); 957 964 958 965 DEBUG_MSG(KERN_INFO "viafb_lcd_set_mode!!\n"); 959 966 /* Get mode table */ 960 967 mode_crt_reg = mode_crt_table->crtc; 961 968 /* Get panel table Pointer */ 962 - vmode_tbl = viafb_get_modetbl_pointer(video_index); 963 969 panel_crt_table = vmode_tbl->crtc; 964 970 panel_crt_reg = panel_crt_table->crtc; 965 971 DEBUG_MSG(KERN_INFO "bellow viafb_lcd_set_mode!!\n"); 966 - set_hres = plvds_setting_info->h_active; 967 - set_vres = plvds_setting_info->v_active; 968 - panel_hres = plvds_setting_info->lcd_panel_hres; 969 - panel_vres = plvds_setting_info->lcd_panel_vres; 970 972 if (VT1636_LVDS == plvds_chip_info->lvds_chip_name) 971 973 viafb_init_lvds_vt1636(plvds_setting_info, plvds_chip_info); 972 974 plvds_setting_info->vclk = panel_crt_table->clk;
+13 -36
drivers/video/via/viafbdev.c
··· 97 97 static int viafb_check_var(struct fb_var_screeninfo *var, 98 98 struct fb_info *info) 99 99 { 100 - int vmode_index, htotal, vtotal; 100 + int htotal, vtotal; 101 + struct VideoModeTable *vmode_entry; 101 102 struct viafb_par *ppar = info->par; 102 103 u32 long_refresh; 103 104 ··· 108 107 if (var->vmode & FB_VMODE_INTERLACED || var->vmode & FB_VMODE_DOUBLE) 109 108 return -EINVAL; 110 109 111 - vmode_index = viafb_get_mode_index(var->xres, var->yres); 112 - if (vmode_index == VIA_RES_INVALID) { 110 + vmode_entry = viafb_get_mode(var->xres, var->yres); 111 + if (!vmode_entry) { 113 112 DEBUG_MSG(KERN_INFO 114 113 "viafb: Mode %dx%dx%d not supported!!\n", 115 114 var->xres, var->yres, var->bits_per_pixel); ··· 143 142 viafb_refresh = viafb_get_refresh(var->xres, var->yres, long_refresh); 144 143 145 144 /* Adjust var according to our driver's own table */ 146 - viafb_fill_var_timing_info(var, viafb_refresh, vmode_index); 145 + viafb_fill_var_timing_info(var, viafb_refresh, vmode_entry); 147 146 if (info->var.accel_flags & FB_ACCELF_TEXT && 148 147 !ppar->shared->engine_mmio) 149 148 info->var.accel_flags = 0; ··· 154 153 static int viafb_set_par(struct fb_info *info) 155 154 { 156 155 struct viafb_par *viapar = info->par; 157 - int vmode_index; 158 - int vmode_index1 = 0; 156 + struct VideoModeTable *vmode_entry, *vmode_entry1 = NULL; 159 157 DEBUG_MSG(KERN_INFO "viafb_set_par!\n"); 160 158 161 159 viapar->depth = fb_get_color_depth(&info->var, &info->fix); 162 160 viafb_update_device_setting(info->var.xres, info->var.yres, 163 161 info->var.bits_per_pixel, viafb_refresh, 0); 164 162 165 - vmode_index = viafb_get_mode_index(info->var.xres, info->var.yres); 166 - 163 + vmode_entry = viafb_get_mode(info->var.xres, info->var.yres); 167 164 if (viafb_SAMM_ON == 1) { 168 165 DEBUG_MSG(KERN_INFO 169 166 "viafb_second_xres = %d, viafb_second_yres = %d, bpp = %d\n", 170 167 viafb_second_xres, viafb_second_yres, viafb_bpp1); 171 - vmode_index1 = viafb_get_mode_index(viafb_second_xres, 168 + vmode_entry1 = viafb_get_mode(viafb_second_xres, 172 169 viafb_second_yres); 173 - DEBUG_MSG(KERN_INFO "->viafb_SAMM_ON: index=%d\n", 174 - vmode_index1); 175 170 176 171 viafb_update_device_setting(viafb_second_xres, 177 172 viafb_second_yres, viafb_bpp1, viafb_refresh1, 1); 178 173 } 179 174 180 - if (vmode_index != VIA_RES_INVALID) { 175 + if (vmode_entry) { 181 176 viafb_update_fix(info); 182 177 viafb_bpp = info->var.bits_per_pixel; 183 178 if (info->var.accel_flags & FB_ACCELF_TEXT) 184 179 info->flags &= ~FBINFO_HWACCEL_DISABLED; 185 180 else 186 181 info->flags |= FBINFO_HWACCEL_DISABLED; 187 - viafb_setmode(vmode_index, info->var.xres, info->var.yres, 188 - info->var.bits_per_pixel, vmode_index1, 189 - viafb_second_xres, viafb_second_yres, viafb_bpp1); 182 + viafb_setmode(vmode_entry, info->var.bits_per_pixel, 183 + vmode_entry1, viafb_bpp1); 190 184 } 191 185 192 186 return 0; ··· 1012 1016 return 0; 1013 1017 } 1014 1018 1015 - int viafb_get_mode_index(int hres, int vres) 1016 - { 1017 - u32 i; 1018 - DEBUG_MSG(KERN_INFO "viafb_get_mode_index!\n"); 1019 - 1020 - for (i = 0; i < NUM_TOTAL_MODETABLE; i++) 1021 - if (CLE266Modes[i].mode_array && 1022 - CLE266Modes[i].crtc[0].crtc.hor_addr == hres && 1023 - CLE266Modes[i].crtc[0].crtc.ver_addr == vres) 1024 - break; 1025 - 1026 - if (i == NUM_TOTAL_MODETABLE) 1027 - return VIA_RES_INVALID; 1028 - 1029 - return CLE266Modes[i].ModeIndex; 1030 - } 1031 - 1032 1019 static void check_available_device_to_enable(int device_id) 1033 1020 { 1034 1021 int device_num = 0; ··· 1827 1848 const struct pci_device_id *ent) 1828 1849 { 1829 1850 u32 default_xres, default_yres; 1830 - int vmode_index; 1851 + struct VideoModeTable *vmode_entry; 1831 1852 u32 viafb_par_length; 1832 1853 1833 1854 DEBUG_MSG(KERN_INFO "VIAFB PCI Probe!!\n"); ··· 1906 1927 } 1907 1928 1908 1929 parse_mode(viafb_mode, &default_xres, &default_yres); 1909 - vmode_index = viafb_get_mode_index(default_xres, default_yres); 1910 - DEBUG_MSG(KERN_INFO "0->index=%d\n", vmode_index); 1911 - 1930 + vmode_entry = viafb_get_mode(default_xres, default_yres); 1912 1931 if (viafb_SAMM_ON == 1) { 1913 1932 parse_mode(viafb_mode1, &viafb_second_xres, 1914 1933 &viafb_second_yres);
-3
drivers/video/via/viafbdev.h
··· 96 96 extern int strict_strtoul(const char *cp, unsigned int base, 97 97 unsigned long *res); 98 98 99 - void viafb_fill_var_timing_info(struct fb_var_screeninfo *var, int refresh, 100 - int mode_index); 101 - int viafb_get_mode_index(int hres, int vres); 102 99 u8 viafb_gpio_i2c_read_lvds(struct lvds_setting_information 103 100 *plvds_setting_info, struct lvds_chip_information 104 101 *plvds_chip_info, u8 index);
+93 -87
drivers/video/via/viamode.c
··· 412 412 }; 413 413 414 414 struct patch_table res_patch_table[] = { 415 - {VIA_RES_1024X768, ARRAY_SIZE(PM1024x768), PM1024x768} 415 + {ARRAY_SIZE(PM1024x768), PM1024x768} 416 416 }; 417 417 418 418 /* struct VPITTable { ··· 879 879 {2800, 2048, 2048, 752, 2200, 224, 1592, 1536, 1536, 56, 1539, 4} } 880 880 }; 881 881 882 - /* Video Mode Table */ 883 - /* struct VideoModeTable {*/ 884 - /* int ModeIndex;*/ 885 - /* struct crt_mode_table *crtc;*/ 886 - /* int mode_array;*/ 887 - /* };*/ 888 - struct VideoModeTable CLE266Modes[] = { 882 + struct VideoModeTable viafb_modes[] = { 889 883 /* Display : 480x640 (GTF) */ 890 - {VIA_RES_480X640, CRTM480x640, ARRAY_SIZE(CRTM480x640)}, 884 + {CRTM480x640, ARRAY_SIZE(CRTM480x640)}, 891 885 892 886 /* Display : 640x480 */ 893 - {VIA_RES_640X480, CRTM640x480, ARRAY_SIZE(CRTM640x480)}, 887 + {CRTM640x480, ARRAY_SIZE(CRTM640x480)}, 894 888 895 889 /* Display : 720x480 (GTF) */ 896 - {VIA_RES_720X480, CRTM720x480, ARRAY_SIZE(CRTM720x480)}, 890 + {CRTM720x480, ARRAY_SIZE(CRTM720x480)}, 897 891 898 892 /* Display : 720x576 (GTF) */ 899 - {VIA_RES_720X576, CRTM720x576, ARRAY_SIZE(CRTM720x576)}, 893 + {CRTM720x576, ARRAY_SIZE(CRTM720x576)}, 900 894 901 895 /* Display : 800x600 */ 902 - {VIA_RES_800X600, CRTM800x600, ARRAY_SIZE(CRTM800x600)}, 896 + {CRTM800x600, ARRAY_SIZE(CRTM800x600)}, 903 897 904 898 /* Display : 800x480 (CVT) */ 905 - {VIA_RES_800X480, CRTM800x480, ARRAY_SIZE(CRTM800x480)}, 899 + {CRTM800x480, ARRAY_SIZE(CRTM800x480)}, 906 900 907 901 /* Display : 848x480 (CVT) */ 908 - {VIA_RES_848X480, CRTM848x480, ARRAY_SIZE(CRTM848x480)}, 902 + {CRTM848x480, ARRAY_SIZE(CRTM848x480)}, 909 903 910 904 /* Display : 852x480 (GTF) */ 911 - {VIA_RES_856X480, CRTM852x480, ARRAY_SIZE(CRTM852x480)}, 905 + {CRTM852x480, ARRAY_SIZE(CRTM852x480)}, 912 906 913 907 /* Display : 1024x512 (GTF) */ 914 - {VIA_RES_1024X512, CRTM1024x512, ARRAY_SIZE(CRTM1024x512)}, 908 + {CRTM1024x512, ARRAY_SIZE(CRTM1024x512)}, 915 909 916 910 /* Display : 1024x600 */ 917 - {VIA_RES_1024X600, CRTM1024x600, ARRAY_SIZE(CRTM1024x600)}, 918 - 919 - /* Display : 1024x576 (GTF) */ 920 - /*{ VIA_RES_1024X576, CRTM1024x576, ARRAY_SIZE(CRTM1024x576)}, */ 911 + {CRTM1024x600, ARRAY_SIZE(CRTM1024x600)}, 921 912 922 913 /* Display : 1024x768 */ 923 - {VIA_RES_1024X768, CRTM1024x768, ARRAY_SIZE(CRTM1024x768)}, 914 + {CRTM1024x768, ARRAY_SIZE(CRTM1024x768)}, 924 915 925 916 /* Display : 1152x864 */ 926 - {VIA_RES_1152X864, CRTM1152x864, ARRAY_SIZE(CRTM1152x864)}, 917 + {CRTM1152x864, ARRAY_SIZE(CRTM1152x864)}, 927 918 928 919 /* Display : 1280x768 (GTF) */ 929 - {VIA_RES_1280X768, CRTM1280x768, ARRAY_SIZE(CRTM1280x768)}, 920 + {CRTM1280x768, ARRAY_SIZE(CRTM1280x768)}, 930 921 931 922 /* Display : 960x600 (CVT) */ 932 - {VIA_RES_960X600, CRTM960x600, ARRAY_SIZE(CRTM960x600)}, 923 + {CRTM960x600, ARRAY_SIZE(CRTM960x600)}, 933 924 934 925 /* Display : 1000x600 (GTF) */ 935 - {VIA_RES_1000X600, CRTM1000x600, ARRAY_SIZE(CRTM1000x600)}, 926 + {CRTM1000x600, ARRAY_SIZE(CRTM1000x600)}, 936 927 937 928 /* Display : 1024x576 (GTF) */ 938 - {VIA_RES_1024X576, CRTM1024x576, ARRAY_SIZE(CRTM1024x576)}, 929 + {CRTM1024x576, ARRAY_SIZE(CRTM1024x576)}, 939 930 940 931 /* Display : 1088x612 (GTF) */ 941 - {VIA_RES_1088X612, CRTM1088x612, ARRAY_SIZE(CRTM1088x612)}, 932 + {CRTM1088x612, ARRAY_SIZE(CRTM1088x612)}, 942 933 943 934 /* Display : 1152x720 (CVT) */ 944 - {VIA_RES_1152X720, CRTM1152x720, ARRAY_SIZE(CRTM1152x720)}, 935 + {CRTM1152x720, ARRAY_SIZE(CRTM1152x720)}, 945 936 946 937 /* Display : 1200x720 (GTF) */ 947 - {VIA_RES_1200X720, CRTM1200x720, ARRAY_SIZE(CRTM1200x720)}, 938 + {CRTM1200x720, ARRAY_SIZE(CRTM1200x720)}, 948 939 949 940 /* Display : 1280x600 (GTF) */ 950 - {VIA_RES_1280X600, CRTM1280x600, ARRAY_SIZE(CRTM1280x600)}, 941 + {CRTM1280x600, ARRAY_SIZE(CRTM1280x600)}, 951 942 952 943 /* Display : 1280x800 (CVT) */ 953 - {VIA_RES_1280X800, CRTM1280x800, ARRAY_SIZE(CRTM1280x800)}, 954 - 955 - /* Display : 1280x800 (GTF) */ 956 - /*{ M1280x800, CRTM1280x800, ARRAY_SIZE(CRTM1280x800)}, */ 944 + {CRTM1280x800, ARRAY_SIZE(CRTM1280x800)}, 957 945 958 946 /* Display : 1280x960 */ 959 - {VIA_RES_1280X960, CRTM1280x960, ARRAY_SIZE(CRTM1280x960)}, 947 + {CRTM1280x960, ARRAY_SIZE(CRTM1280x960)}, 960 948 961 949 /* Display : 1280x1024 */ 962 - {VIA_RES_1280X1024, CRTM1280x1024, ARRAY_SIZE(CRTM1280x1024)}, 950 + {CRTM1280x1024, ARRAY_SIZE(CRTM1280x1024)}, 963 951 964 952 /* Display : 1360x768 (CVT) */ 965 - {VIA_RES_1360X768, CRTM1360x768, ARRAY_SIZE(CRTM1360x768)}, 966 - 967 - /* Display : 1360x768 (CVT Reduce Blanking) */ 968 - {VIA_RES_1360X768_RB, CRTM1360x768_RB, 969 - ARRAY_SIZE(CRTM1360x768_RB)}, 953 + {CRTM1360x768, ARRAY_SIZE(CRTM1360x768)}, 970 954 971 955 /* Display : 1366x768 */ 972 - {VIA_RES_1366X768, CRTM1366x768, ARRAY_SIZE(CRTM1366x768)}, 956 + {CRTM1366x768, ARRAY_SIZE(CRTM1366x768)}, 973 957 974 958 /* Display : 1368x768 (GTF) */ 975 - /*{ M1368x768,CRTM1368x768,ARRAY_SIZE(CRTM1368x768)}, */ 976 - /* Display : 1368x768 (GTF) */ 977 - {VIA_RES_1368X768, CRTM1368x768, ARRAY_SIZE(CRTM1368x768)}, 959 + {CRTM1368x768, ARRAY_SIZE(CRTM1368x768)}, 978 960 979 961 /* Display : 1440x900 (CVT) */ 980 - {VIA_RES_1440X900, CRTM1440x900, ARRAY_SIZE(CRTM1440x900)}, 981 - 982 - /* Display : 1440x900 (CVT Reduce Blanking) */ 983 - {VIA_RES_1440X900_RB, CRTM1440x900_RB, 984 - ARRAY_SIZE(CRTM1440x900_RB)}, 962 + {CRTM1440x900, ARRAY_SIZE(CRTM1440x900)}, 985 963 986 964 /* Display : 1440x1050 (GTF) */ 987 - {VIA_RES_1440X1050, CRTM1440x1050, ARRAY_SIZE(CRTM1440x1050)}, 988 - 989 - /* Display : 1400x1050 (CVT Reduce Blanking) */ 990 - {VIA_RES_1400X1050_RB, CRTM1400x1050_RB, 991 - ARRAY_SIZE(CRTM1400x1050_RB)}, 965 + {CRTM1440x1050, ARRAY_SIZE(CRTM1440x1050)}, 992 966 993 967 /* Display : 1600x900 (CVT) */ 994 - {VIA_RES_1600X900, CRTM1600x900, ARRAY_SIZE(CRTM1600x900)}, 995 - 996 - /* Display : 1600x900 (CVT Reduce Blanking) */ 997 - {VIA_RES_1600X900_RB, CRTM1600x900_RB, 998 - ARRAY_SIZE(CRTM1600x900_RB)}, 968 + {CRTM1600x900, ARRAY_SIZE(CRTM1600x900)}, 999 969 1000 970 /* Display : 1600x1024 (GTF) */ 1001 - {VIA_RES_1600X1024, CRTM1600x1024, ARRAY_SIZE(CRTM1600x1024)}, 971 + {CRTM1600x1024, ARRAY_SIZE(CRTM1600x1024)}, 1002 972 1003 973 /* Display : 1600x1200 */ 1004 - {VIA_RES_1600X1200, CRTM1600x1200, ARRAY_SIZE(CRTM1600x1200)}, 974 + {CRTM1600x1200, ARRAY_SIZE(CRTM1600x1200)}, 1005 975 1006 976 /* Display : 1680x1050 (CVT) */ 1007 - {VIA_RES_1680X1050, CRTM1680x1050, ARRAY_SIZE(CRTM1680x1050)}, 1008 - 1009 - /* Display : 1680x1050 (CVT Reduce Blanking) */ 1010 - {VIA_RES_1680X1050_RB, CRTM1680x1050_RB, 1011 - ARRAY_SIZE(CRTM1680x1050_RB)}, 977 + {CRTM1680x1050, ARRAY_SIZE(CRTM1680x1050)}, 1012 978 1013 979 /* Display : 1792x1344 (DMT) */ 1014 - {VIA_RES_1792X1344, CRTM1792x1344, ARRAY_SIZE(CRTM1792x1344)}, 980 + {CRTM1792x1344, ARRAY_SIZE(CRTM1792x1344)}, 1015 981 1016 982 /* Display : 1856x1392 (DMT) */ 1017 - {VIA_RES_1856X1392, CRTM1856x1392, ARRAY_SIZE(CRTM1856x1392)}, 983 + {CRTM1856x1392, ARRAY_SIZE(CRTM1856x1392)}, 1018 984 1019 985 /* Display : 1920x1440 */ 1020 - {VIA_RES_1920X1440, CRTM1920x1440, ARRAY_SIZE(CRTM1920x1440)}, 986 + {CRTM1920x1440, ARRAY_SIZE(CRTM1920x1440)}, 1021 987 1022 988 /* Display : 2048x1536 */ 1023 - {VIA_RES_2048X1536, CRTM2048x1536, ARRAY_SIZE(CRTM2048x1536)}, 989 + {CRTM2048x1536, ARRAY_SIZE(CRTM2048x1536)}, 1024 990 1025 991 /* Display : 1280x720 */ 1026 - {VIA_RES_1280X720, CRTM1280x720, ARRAY_SIZE(CRTM1280x720)}, 992 + {CRTM1280x720, ARRAY_SIZE(CRTM1280x720)}, 1027 993 1028 994 /* Display : 1920x1080 (CVT) */ 1029 - {VIA_RES_1920X1080, CRTM1920x1080, ARRAY_SIZE(CRTM1920x1080)}, 1030 - 1031 - /* Display : 1920x1080 (CVT Reduce Blanking) */ 1032 - {VIA_RES_1920X1080_RB, CRTM1920x1080_RB, 1033 - ARRAY_SIZE(CRTM1920x1080_RB)}, 995 + {CRTM1920x1080, ARRAY_SIZE(CRTM1920x1080)}, 1034 996 1035 997 /* Display : 1920x1200 (CVT) */ 1036 - {VIA_RES_1920X1200, CRTM1920x1200, ARRAY_SIZE(CRTM1920x1200)}, 1037 - 1038 - /* Display : 1920x1200 (CVT Reduce Blanking) */ 1039 - {VIA_RES_1920X1200_RB, CRTM1920x1200_RB, 1040 - ARRAY_SIZE(CRTM1920x1200_RB)}, 998 + {CRTM1920x1200, ARRAY_SIZE(CRTM1920x1200)}, 1041 999 1042 1000 /* Display : 1400x1050 (CVT) */ 1043 - {VIA_RES_1400X1050, CRTM1400x1050, ARRAY_SIZE(CRTM1400x1050)} 1001 + {CRTM1400x1050, ARRAY_SIZE(CRTM1400x1050)} 1044 1002 }; 1003 + 1004 + struct VideoModeTable viafb_rb_modes[] = { 1005 + /* Display : 1360x768 (CVT Reduce Blanking) */ 1006 + {CRTM1360x768_RB, ARRAY_SIZE(CRTM1360x768_RB)}, 1007 + 1008 + /* Display : 1440x900 (CVT Reduce Blanking) */ 1009 + {CRTM1440x900_RB, ARRAY_SIZE(CRTM1440x900_RB)}, 1010 + 1011 + /* Display : 1400x1050 (CVT Reduce Blanking) */ 1012 + {CRTM1400x1050_RB, ARRAY_SIZE(CRTM1400x1050_RB)}, 1013 + 1014 + /* Display : 1600x900 (CVT Reduce Blanking) */ 1015 + {CRTM1600x900_RB, ARRAY_SIZE(CRTM1600x900_RB)}, 1016 + 1017 + /* Display : 1680x1050 (CVT Reduce Blanking) */ 1018 + {CRTM1680x1050_RB, ARRAY_SIZE(CRTM1680x1050_RB)}, 1019 + 1020 + /* Display : 1920x1080 (CVT Reduce Blanking) */ 1021 + {CRTM1920x1080_RB, ARRAY_SIZE(CRTM1920x1080_RB)}, 1022 + 1023 + /* Display : 1920x1200 (CVT Reduce Blanking) */ 1024 + {CRTM1920x1200_RB, ARRAY_SIZE(CRTM1920x1200_RB)} 1025 + }; 1026 + 1045 1027 struct crt_mode_table CEAM1280x720[] = { 1046 1028 {REFRESH_60, CLK_74_270M, M1280X720_CEA_R60_HSP, 1047 1029 M1280X720_CEA_R60_VSP, ··· 1038 1056 }; 1039 1057 struct VideoModeTable CEA_HDMI_Modes[] = { 1040 1058 /* Display : 1280x720 */ 1041 - {VIA_RES_1280X720, CEAM1280x720, ARRAY_SIZE(CEAM1280x720)}, 1042 - {VIA_RES_1920X1080, CEAM1920x1080, ARRAY_SIZE(CEAM1920x1080)} 1059 + {CEAM1280x720, ARRAY_SIZE(CEAM1280x720)}, 1060 + {CEAM1920x1080, ARRAY_SIZE(CEAM1920x1080)} 1043 1061 }; 1044 1062 1045 1063 int NUM_TOTAL_RES_MAP_REFRESH = ARRAY_SIZE(res_map_refresh_tbl); ··· 1051 1069 int NUM_TOTAL_VX855_ModeXregs = ARRAY_SIZE(VX855_ModeXregs); 1052 1070 int NUM_TOTAL_CLE266_ModeXregs = ARRAY_SIZE(CLE266_ModeXregs); 1053 1071 int NUM_TOTAL_PATCH_MODE = ARRAY_SIZE(res_patch_table); 1054 - int NUM_TOTAL_MODETABLE = ARRAY_SIZE(CLE266Modes); 1072 + 1073 + 1074 + struct VideoModeTable *viafb_get_mode(int hres, int vres) 1075 + { 1076 + u32 i; 1077 + for (i = 0; i < ARRAY_SIZE(viafb_modes); i++) 1078 + if (viafb_modes[i].mode_array && 1079 + viafb_modes[i].crtc[0].crtc.hor_addr == hres && 1080 + viafb_modes[i].crtc[0].crtc.ver_addr == vres) 1081 + return &viafb_modes[i]; 1082 + 1083 + return NULL; 1084 + } 1085 + 1086 + struct VideoModeTable *viafb_get_rb_mode(int hres, int vres) 1087 + { 1088 + u32 i; 1089 + for (i = 0; i < ARRAY_SIZE(viafb_rb_modes); i++) 1090 + if (viafb_rb_modes[i].mode_array && 1091 + viafb_rb_modes[i].crtc[0].crtc.hor_addr == hres && 1092 + viafb_rb_modes[i].crtc[0].crtc.ver_addr == vres) 1093 + return &viafb_rb_modes[i]; 1094 + 1095 + return NULL; 1096 + }
+4 -4
drivers/video/via/viamode.h
··· 32 32 }; 33 33 34 34 struct VideoModeTable { 35 - int ModeIndex; 36 35 struct crt_mode_table *crtc; 37 36 int mode_array; 38 37 }; 39 38 40 39 struct patch_table { 41 - int mode_index; 42 40 int table_length; 43 41 struct io_reg *io_reg_table; 44 42 }; ··· 57 59 extern int NUM_TOTAL_VX855_ModeXregs; 58 60 extern int NUM_TOTAL_CLE266_ModeXregs; 59 61 extern int NUM_TOTAL_PATCH_MODE; 60 - extern int NUM_TOTAL_MODETABLE; 61 62 62 63 /********************/ 63 64 /* Mode Table */ 64 65 /********************/ 65 66 66 - extern struct VideoModeTable CLE266Modes[]; 67 67 extern struct crt_mode_table CEAM1280x720[]; 68 68 extern struct crt_mode_table CEAM1920x1080[]; 69 69 extern struct VideoModeTable CEA_HDMI_Modes[]; ··· 77 81 extern struct io_reg PM1024x768[]; 78 82 extern struct patch_table res_patch_table[]; 79 83 extern struct VPITTable VPIT; 84 + 85 + struct VideoModeTable *viafb_get_mode(int hres, int vres); 86 + struct VideoModeTable *viafb_get_rb_mode(int hres, int vres); 87 + 80 88 #endif /* __VIAMODE_H__ */