aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/video/via/global.c2
-rw-r--r--drivers/video/via/global.h2
-rw-r--r--drivers/video/via/hw.c23
-rw-r--r--drivers/video/via/hw.h3
-rw-r--r--drivers/video/via/viafbdev.c14
-rw-r--r--drivers/video/via/viamode.c4
-rw-r--r--drivers/video/via/viamode.h2
7 files changed, 17 insertions, 33 deletions
diff --git a/drivers/video/via/global.c b/drivers/video/via/global.c
index e10d8249534..3102171c167 100644
--- a/drivers/video/via/global.c
+++ b/drivers/video/via/global.c
@@ -35,6 +35,8 @@ int viafb_LCD_ON ;
35int viafb_LCD2_ON; 35int viafb_LCD2_ON;
36int viafb_SAMM_ON; 36int viafb_SAMM_ON;
37int viafb_dual_fb; 37int viafb_dual_fb;
38unsigned int viafb_second_xres = 640;
39unsigned int viafb_second_yres = 480;
38int viafb_hotplug_Xres = 640; 40int viafb_hotplug_Xres = 640;
39int viafb_hotplug_Yres = 480; 41int viafb_hotplug_Yres = 480;
40int viafb_hotplug_bpp = 32; 42int viafb_hotplug_bpp = 32;
diff --git a/drivers/video/via/global.h b/drivers/video/via/global.h
index ff969dc3459..275dbbbd6b8 100644
--- a/drivers/video/via/global.h
+++ b/drivers/video/via/global.h
@@ -67,6 +67,8 @@ extern int viafb_lcd_dsp_method;
67extern int viafb_lcd_mode; 67extern int viafb_lcd_mode;
68 68
69extern int viafb_CRT_ON; 69extern int viafb_CRT_ON;
70extern unsigned int viafb_second_xres;
71extern unsigned int viafb_second_yres;
70extern int viafb_hotplug_Xres; 72extern int viafb_hotplug_Xres;
71extern int viafb_hotplug_Yres; 73extern int viafb_hotplug_Yres;
72extern int viafb_hotplug_bpp; 74extern int viafb_hotplug_bpp;
diff --git a/drivers/video/via/hw.c b/drivers/video/via/hw.c
index 30668bd1787..d5aaca9cfa7 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
1843int viafb_setmode(struct VideoModeTable *vmode_tbl, int video_bpp, 1843int 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 46f65da11e7..4db5b6e8d8d 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);
657void viafb_set_dpa_gfx(int output_interface, struct GFX_DPA_SETTING\ 657void viafb_set_dpa_gfx(int output_interface, struct GFX_DPA_SETTING\
658 *p_gfx_dpa_setting); 658 *p_gfx_dpa_setting);
659 659
660int viafb_setmode(struct VideoModeTable *vmode_tbl, int video_bpp, 660int viafb_setmode(int video_bpp, int video_bpp1);
661 struct VideoModeTable *vmode_tbl1, int video_bpp1);
662void viafb_fill_var_timing_info(struct fb_var_screeninfo *var, 661void viafb_fill_var_timing_info(struct fb_var_screeninfo *var,
663 struct crt_mode_table *mode); 662 struct crt_mode_table *mode);
664void __devinit viafb_init_chip_info(int chip_type); 663void __devinit viafb_init_chip_info(int chip_type);
diff --git a/drivers/video/via/viafbdev.c b/drivers/video/via/viafbdev.c
index 0c0ef9568cf..38567849a9d 100644
--- a/drivers/video/via/viafbdev.c
+++ b/drivers/video/via/viafbdev.c
@@ -38,8 +38,6 @@ static char *viafb_mode1;
38static int viafb_bpp = 32; 38static int viafb_bpp = 32;
39static int viafb_bpp1 = 32; 39static int viafb_bpp1 = 32;
40 40
41static unsigned int viafb_second_xres = 640;
42static unsigned int viafb_second_yres = 480;
43static unsigned int viafb_second_offset; 41static unsigned int viafb_second_offset;
44static int viafb_second_size; 42static int viafb_second_size;
45 43
@@ -267,7 +265,6 @@ static int viafb_check_var(struct fb_var_screeninfo *var,
267static int viafb_set_par(struct fb_info *info) 265static 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 88096e5fa07..0911cac1b2f 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
899struct VideoModeTable *viafb_get_mode(int hres, int vres) 899static 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
909struct VideoModeTable *viafb_get_rb_mode(int hres, int vres) 909static 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 0396581b977..5917a2b00e1 100644
--- a/drivers/video/via/viamode.h
+++ b/drivers/video/via/viamode.h
@@ -60,9 +60,7 @@ extern struct io_reg PM1024x768[];
60extern struct patch_table res_patch_table[]; 60extern struct patch_table res_patch_table[];
61extern struct VPITTable VPIT; 61extern struct VPITTable VPIT;
62 62
63struct VideoModeTable *viafb_get_mode(int hres, int vres);
64struct crt_mode_table *viafb_get_best_mode(int hres, int vres, int refresh); 63struct crt_mode_table *viafb_get_best_mode(int hres, int vres, int refresh);
65struct VideoModeTable *viafb_get_rb_mode(int hres, int vres);
66struct crt_mode_table *viafb_get_best_rb_mode(int hres, int vres, int refresh); 64struct crt_mode_table *viafb_get_best_rb_mode(int hres, int vres, int refresh);
67 65
68#endif /* __VIAMODE_H__ */ 66#endif /* __VIAMODE_H__ */