aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/via
diff options
context:
space:
mode:
authorFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>2011-08-07 09:34:35 -0400
committerFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>2011-08-07 09:34:35 -0400
commit5dd72f12df00cbabc16de770b79b17ced63138be (patch)
treef25805da9a8e350d71dc2fcdf2e5b9b9256e11fe /drivers/video/via
parentbfe7d5f9396d5f2607454fd9ff89397fa3ba9a32 (diff)
viafb: get rid of the remaining modetable structure assumptions
This patch removes the remaining places where assumptions about the structure of the modetable were made. Aside from some places where assumptions are made that certain modes are in the modetable the only code dealing with the modetable and not just a single mode is in viamode. This will allow chaniging the modetable and use other sources for videomodes like the subsystem or EDID. Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
Diffstat (limited to 'drivers/video/via')
-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 e10d8249534c..3102171c1674 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 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;
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 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
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 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);
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 0c0ef9568cf3..38567849a9d6 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 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
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 0396581b9775..5917a2b00e1b 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__ */