diff options
-rw-r--r-- | drivers/video/via/global.c | 2 | ||||
-rw-r--r-- | drivers/video/via/global.h | 2 | ||||
-rw-r--r-- | drivers/video/via/hw.c | 23 | ||||
-rw-r--r-- | drivers/video/via/hw.h | 3 | ||||
-rw-r--r-- | drivers/video/via/viafbdev.c | 14 | ||||
-rw-r--r-- | drivers/video/via/viamode.c | 4 | ||||
-rw-r--r-- | drivers/video/via/viamode.h | 2 |
7 files changed, 17 insertions, 33 deletions
diff --git a/drivers/video/via/global.c b/drivers/video/via/global.c index e10d8249534c..3102171c1674 100644 --- a/drivers/video/via/global.c +++ b/drivers/video/via/global.c | |||
@@ -35,6 +35,8 @@ int viafb_LCD_ON ; | |||
35 | int viafb_LCD2_ON; | 35 | int viafb_LCD2_ON; |
36 | int viafb_SAMM_ON; | 36 | int viafb_SAMM_ON; |
37 | int viafb_dual_fb; | 37 | int viafb_dual_fb; |
38 | unsigned int viafb_second_xres = 640; | ||
39 | unsigned int viafb_second_yres = 480; | ||
38 | int viafb_hotplug_Xres = 640; | 40 | int viafb_hotplug_Xres = 640; |
39 | int viafb_hotplug_Yres = 480; | 41 | int viafb_hotplug_Yres = 480; |
40 | int viafb_hotplug_bpp = 32; | 42 | int viafb_hotplug_bpp = 32; |
diff --git a/drivers/video/via/global.h b/drivers/video/via/global.h index ff969dc34593..275dbbbd6b81 100644 --- a/drivers/video/via/global.h +++ b/drivers/video/via/global.h | |||
@@ -67,6 +67,8 @@ extern int viafb_lcd_dsp_method; | |||
67 | extern int viafb_lcd_mode; | 67 | extern int viafb_lcd_mode; |
68 | 68 | ||
69 | extern int viafb_CRT_ON; | 69 | extern int viafb_CRT_ON; |
70 | extern unsigned int viafb_second_xres; | ||
71 | extern unsigned int viafb_second_yres; | ||
70 | extern int viafb_hotplug_Xres; | 72 | extern int viafb_hotplug_Xres; |
71 | extern int viafb_hotplug_Yres; | 73 | extern int viafb_hotplug_Yres; |
72 | extern int viafb_hotplug_bpp; | 74 | extern int viafb_hotplug_bpp; |
diff --git a/drivers/video/via/hw.c b/drivers/video/via/hw.c index 30668bd17875..d5aaca9cfa7e 100644 --- a/drivers/video/via/hw.c +++ b/drivers/video/via/hw.c | |||
@@ -1840,23 +1840,16 @@ static void hw_init(void) | |||
1840 | load_fix_bit_crtc_reg(); | 1840 | load_fix_bit_crtc_reg(); |
1841 | } | 1841 | } |
1842 | 1842 | ||
1843 | int viafb_setmode(struct VideoModeTable *vmode_tbl, int video_bpp, | 1843 | int viafb_setmode(int video_bpp, int video_bpp1) |
1844 | struct VideoModeTable *vmode_tbl1, int video_bpp1) | ||
1845 | { | 1844 | { |
1846 | int j; | 1845 | int j; |
1847 | int port; | 1846 | int port; |
1848 | u32 devices = viaparinfo->shared->iga1_devices | 1847 | u32 devices = viaparinfo->shared->iga1_devices |
1849 | | viaparinfo->shared->iga2_devices; | 1848 | | viaparinfo->shared->iga2_devices; |
1850 | u8 value, index, mask; | 1849 | u8 value, index, mask; |
1851 | struct crt_mode_table *crt_timing; | ||
1852 | struct crt_mode_table *crt_timing1 = NULL; | ||
1853 | struct fb_var_screeninfo var2; | 1850 | struct fb_var_screeninfo var2; |
1854 | 1851 | ||
1855 | device_screen_off(); | 1852 | device_screen_off(); |
1856 | crt_timing = vmode_tbl->crtc; | ||
1857 | if (viafb_SAMM_ON == 1) | ||
1858 | crt_timing1 = vmode_tbl1->crtc; | ||
1859 | |||
1860 | device_off(); | 1853 | device_off(); |
1861 | via_set_state(devices, VIA_STATE_OFF); | 1854 | via_set_state(devices, VIA_STATE_OFF); |
1862 | 1855 | ||
@@ -1865,9 +1858,8 @@ int viafb_setmode(struct VideoModeTable *vmode_tbl, int video_bpp, | |||
1865 | /* Update Patch Register */ | 1858 | /* Update Patch Register */ |
1866 | 1859 | ||
1867 | if ((viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266 | 1860 | if ((viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266 |
1868 | || viaparinfo->chip_info->gfx_chip_name == UNICHROME_K400) | 1861 | || viaparinfo->chip_info->gfx_chip_name == UNICHROME_K400) |
1869 | && vmode_tbl->crtc[0].crtc.hor_addr == 1024 | 1862 | && viafbinfo->var.xres == 1024 && viafbinfo->var.yres == 768) { |
1870 | && vmode_tbl->crtc[0].crtc.ver_addr == 768) { | ||
1871 | for (j = 0; j < res_patch_table[0].table_length; j++) { | 1863 | for (j = 0; j < res_patch_table[0].table_length; j++) { |
1872 | index = res_patch_table[0].io_reg_table[j].index; | 1864 | index = res_patch_table[0].io_reg_table[j].index; |
1873 | port = res_patch_table[0].io_reg_table[j].port; | 1865 | port = res_patch_table[0].io_reg_table[j].port; |
@@ -1898,8 +1890,7 @@ int viafb_setmode(struct VideoModeTable *vmode_tbl, int video_bpp, | |||
1898 | var2 = viafbinfo1->var; | 1890 | var2 = viafbinfo1->var; |
1899 | } else if (viafb_SAMM_ON) { | 1891 | } else if (viafb_SAMM_ON) { |
1900 | viafb_fill_var_timing_info(&var2, viafb_get_best_mode( | 1892 | viafb_fill_var_timing_info(&var2, viafb_get_best_mode( |
1901 | vmode_tbl1->crtc->crtc.hor_addr, | 1893 | viafb_second_xres, viafb_second_yres, viafb_refresh1)); |
1902 | vmode_tbl1->crtc->crtc.ver_addr, viafb_refresh1)); | ||
1903 | var2.bits_per_pixel = viafbinfo->var.bits_per_pixel; | 1894 | var2.bits_per_pixel = viafbinfo->var.bits_per_pixel; |
1904 | } | 1895 | } |
1905 | 1896 | ||
@@ -1916,7 +1907,7 @@ int viafb_setmode(struct VideoModeTable *vmode_tbl, int video_bpp, | |||
1916 | /* Patch if set_hres is not 8 alignment (1366) to viafb_setmode | 1907 | /* Patch if set_hres is not 8 alignment (1366) to viafb_setmode |
1917 | to 8 alignment (1368),there is several pixels (2 pixels) | 1908 | to 8 alignment (1368),there is several pixels (2 pixels) |
1918 | on right side of screen. */ | 1909 | on right side of screen. */ |
1919 | if (vmode_tbl->crtc[0].crtc.hor_addr % 8) { | 1910 | if (viafbinfo->var.xres % 8) { |
1920 | viafb_unlock_crt(); | 1911 | viafb_unlock_crt(); |
1921 | viafb_write_reg(CR02, VIACR, | 1912 | viafb_write_reg(CR02, VIACR, |
1922 | viafb_read_reg(VIACR, CR02) - 1); | 1913 | viafb_read_reg(VIACR, CR02) - 1); |
@@ -1974,8 +1965,8 @@ int viafb_setmode(struct VideoModeTable *vmode_tbl, int video_bpp, | |||
1974 | 1965 | ||
1975 | /* If set mode normally, save resolution information for hot-plug . */ | 1966 | /* If set mode normally, save resolution information for hot-plug . */ |
1976 | if (!viafb_hotplug) { | 1967 | if (!viafb_hotplug) { |
1977 | viafb_hotplug_Xres = vmode_tbl->crtc[0].crtc.hor_addr; | 1968 | viafb_hotplug_Xres = viafbinfo->var.xres; |
1978 | viafb_hotplug_Yres = vmode_tbl->crtc[0].crtc.ver_addr; | 1969 | viafb_hotplug_Yres = viafbinfo->var.yres; |
1979 | viafb_hotplug_bpp = video_bpp; | 1970 | viafb_hotplug_bpp = video_bpp; |
1980 | viafb_hotplug_refresh = viafb_refresh; | 1971 | viafb_hotplug_refresh = viafb_refresh; |
1981 | 1972 | ||
diff --git a/drivers/video/via/hw.h b/drivers/video/via/hw.h index 46f65da11e77..4db5b6e8d8d0 100644 --- a/drivers/video/via/hw.h +++ b/drivers/video/via/hw.h | |||
@@ -657,8 +657,7 @@ void viafb_load_FIFO_reg(int set_iga, int hor_active, int ver_active); | |||
657 | void viafb_set_dpa_gfx(int output_interface, struct GFX_DPA_SETTING\ | 657 | void viafb_set_dpa_gfx(int output_interface, struct GFX_DPA_SETTING\ |
658 | *p_gfx_dpa_setting); | 658 | *p_gfx_dpa_setting); |
659 | 659 | ||
660 | int viafb_setmode(struct VideoModeTable *vmode_tbl, int video_bpp, | 660 | int viafb_setmode(int video_bpp, int video_bpp1); |
661 | struct VideoModeTable *vmode_tbl1, int video_bpp1); | ||
662 | void viafb_fill_var_timing_info(struct fb_var_screeninfo *var, | 661 | void viafb_fill_var_timing_info(struct fb_var_screeninfo *var, |
663 | struct crt_mode_table *mode); | 662 | struct crt_mode_table *mode); |
664 | void __devinit viafb_init_chip_info(int chip_type); | 663 | void __devinit viafb_init_chip_info(int chip_type); |
diff --git a/drivers/video/via/viafbdev.c b/drivers/video/via/viafbdev.c index 0c0ef9568cf3..38567849a9d6 100644 --- a/drivers/video/via/viafbdev.c +++ b/drivers/video/via/viafbdev.c | |||
@@ -38,8 +38,6 @@ static char *viafb_mode1; | |||
38 | static int viafb_bpp = 32; | 38 | static int viafb_bpp = 32; |
39 | static int viafb_bpp1 = 32; | 39 | static int viafb_bpp1 = 32; |
40 | 40 | ||
41 | static unsigned int viafb_second_xres = 640; | ||
42 | static unsigned int viafb_second_yres = 480; | ||
43 | static unsigned int viafb_second_offset; | 41 | static unsigned int viafb_second_offset; |
44 | static int viafb_second_size; | 42 | static int viafb_second_size; |
45 | 43 | ||
@@ -267,7 +265,6 @@ static int viafb_check_var(struct fb_var_screeninfo *var, | |||
267 | static int viafb_set_par(struct fb_info *info) | 265 | static int viafb_set_par(struct fb_info *info) |
268 | { | 266 | { |
269 | struct viafb_par *viapar = info->par; | 267 | struct viafb_par *viapar = info->par; |
270 | struct VideoModeTable *vmode_entry, *vmode_entry1 = NULL; | ||
271 | int refresh; | 268 | int refresh; |
272 | DEBUG_MSG(KERN_INFO "viafb_set_par!\n"); | 269 | DEBUG_MSG(KERN_INFO "viafb_set_par!\n"); |
273 | 270 | ||
@@ -276,10 +273,7 @@ static int viafb_set_par(struct fb_info *info) | |||
276 | viafb_update_device_setting(viafbinfo->var.xres, viafbinfo->var.yres, | 273 | viafb_update_device_setting(viafbinfo->var.xres, viafbinfo->var.yres, |
277 | viafbinfo->var.bits_per_pixel, 0); | 274 | viafbinfo->var.bits_per_pixel, 0); |
278 | 275 | ||
279 | vmode_entry = viafb_get_mode(viafbinfo->var.xres, viafbinfo->var.yres); | ||
280 | if (viafb_dual_fb) { | 276 | if (viafb_dual_fb) { |
281 | vmode_entry1 = viafb_get_mode(viafbinfo1->var.xres, | ||
282 | viafbinfo1->var.yres); | ||
283 | viafb_update_device_setting(viafbinfo1->var.xres, | 277 | viafb_update_device_setting(viafbinfo1->var.xres, |
284 | viafbinfo1->var.yres, viafbinfo1->var.bits_per_pixel, | 278 | viafbinfo1->var.yres, viafbinfo1->var.bits_per_pixel, |
285 | 1); | 279 | 1); |
@@ -287,8 +281,6 @@ static int viafb_set_par(struct fb_info *info) | |||
287 | DEBUG_MSG(KERN_INFO | 281 | DEBUG_MSG(KERN_INFO |
288 | "viafb_second_xres = %d, viafb_second_yres = %d, bpp = %d\n", | 282 | "viafb_second_xres = %d, viafb_second_yres = %d, bpp = %d\n", |
289 | viafb_second_xres, viafb_second_yres, viafb_bpp1); | 283 | viafb_second_xres, viafb_second_yres, viafb_bpp1); |
290 | vmode_entry1 = viafb_get_mode(viafb_second_xres, | ||
291 | viafb_second_yres); | ||
292 | 284 | ||
293 | viafb_update_device_setting(viafb_second_xres, | 285 | viafb_update_device_setting(viafb_second_xres, |
294 | viafb_second_yres, viafb_bpp1, 1); | 286 | viafb_second_yres, viafb_bpp1, 1); |
@@ -296,7 +288,8 @@ static int viafb_set_par(struct fb_info *info) | |||
296 | 288 | ||
297 | refresh = viafb_get_refresh(info->var.xres, info->var.yres, | 289 | refresh = viafb_get_refresh(info->var.xres, info->var.yres, |
298 | get_var_refresh(&info->var)); | 290 | get_var_refresh(&info->var)); |
299 | if (vmode_entry) { | 291 | if (viafb_get_best_mode(viafbinfo->var.xres, viafbinfo->var.yres, |
292 | refresh)) { | ||
300 | if (viafb_dual_fb && viapar->iga_path == IGA2) { | 293 | if (viafb_dual_fb && viapar->iga_path == IGA2) { |
301 | viafb_bpp1 = info->var.bits_per_pixel; | 294 | viafb_bpp1 = info->var.bits_per_pixel; |
302 | viafb_refresh1 = refresh; | 295 | viafb_refresh1 = refresh; |
@@ -309,8 +302,7 @@ static int viafb_set_par(struct fb_info *info) | |||
309 | info->flags &= ~FBINFO_HWACCEL_DISABLED; | 302 | info->flags &= ~FBINFO_HWACCEL_DISABLED; |
310 | else | 303 | else |
311 | info->flags |= FBINFO_HWACCEL_DISABLED; | 304 | info->flags |= FBINFO_HWACCEL_DISABLED; |
312 | viafb_setmode(vmode_entry, info->var.bits_per_pixel, | 305 | viafb_setmode(info->var.bits_per_pixel, viafb_bpp1); |
313 | vmode_entry1, viafb_bpp1); | ||
314 | viafb_pan_display(&info->var, info); | 306 | viafb_pan_display(&info->var, info); |
315 | } | 307 | } |
316 | 308 | ||
diff --git a/drivers/video/via/viamode.c b/drivers/video/via/viamode.c index 88096e5fa077..0911cac1b2ff 100644 --- a/drivers/video/via/viamode.c +++ b/drivers/video/via/viamode.c | |||
@@ -896,7 +896,7 @@ static struct crt_mode_table *get_best_mode(struct VideoModeTable *vmt, | |||
896 | return best; | 896 | return best; |
897 | } | 897 | } |
898 | 898 | ||
899 | struct VideoModeTable *viafb_get_mode(int hres, int vres) | 899 | static struct VideoModeTable *viafb_get_mode(int hres, int vres) |
900 | { | 900 | { |
901 | return get_modes(viafb_modes, ARRAY_SIZE(viafb_modes), hres, vres); | 901 | return get_modes(viafb_modes, ARRAY_SIZE(viafb_modes), hres, vres); |
902 | } | 902 | } |
@@ -906,7 +906,7 @@ struct crt_mode_table *viafb_get_best_mode(int hres, int vres, int refresh) | |||
906 | return get_best_mode(viafb_get_mode(hres, vres), refresh); | 906 | return get_best_mode(viafb_get_mode(hres, vres), refresh); |
907 | } | 907 | } |
908 | 908 | ||
909 | struct VideoModeTable *viafb_get_rb_mode(int hres, int vres) | 909 | static struct VideoModeTable *viafb_get_rb_mode(int hres, int vres) |
910 | { | 910 | { |
911 | return get_modes(viafb_rb_modes, ARRAY_SIZE(viafb_rb_modes), hres, | 911 | return get_modes(viafb_rb_modes, ARRAY_SIZE(viafb_rb_modes), hres, |
912 | vres); | 912 | vres); |
diff --git a/drivers/video/via/viamode.h b/drivers/video/via/viamode.h index 0396581b9775..5917a2b00e1b 100644 --- a/drivers/video/via/viamode.h +++ b/drivers/video/via/viamode.h | |||
@@ -60,9 +60,7 @@ extern struct io_reg PM1024x768[]; | |||
60 | extern struct patch_table res_patch_table[]; | 60 | extern struct patch_table res_patch_table[]; |
61 | extern struct VPITTable VPIT; | 61 | extern struct VPITTable VPIT; |
62 | 62 | ||
63 | struct VideoModeTable *viafb_get_mode(int hres, int vres); | ||
64 | struct crt_mode_table *viafb_get_best_mode(int hres, int vres, int refresh); | 63 | struct crt_mode_table *viafb_get_best_mode(int hres, int vres, int refresh); |
65 | struct VideoModeTable *viafb_get_rb_mode(int hres, int vres); | ||
66 | struct crt_mode_table *viafb_get_best_rb_mode(int hres, int vres, int refresh); | 64 | struct crt_mode_table *viafb_get_best_rb_mode(int hres, int vres, int refresh); |
67 | 65 | ||
68 | #endif /* __VIAMODE_H__ */ | 66 | #endif /* __VIAMODE_H__ */ |