summaryrefslogtreecommitdiffstats
path: root/drivers/video/via/hw.c
diff options
context:
space:
mode:
authorFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>2011-03-16 17:31:32 +0100
committerFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>2011-03-16 22:42:00 +0100
commit726abbc7957a2feeaf6f5e3d72579b3fd0211134 (patch)
tree04eab2f66ab63a8aae8051ccd34aaa433a8e41a9 /drivers/video/via/hw.c
parentMerge branch 'viafb-pll' into viafb-next (diff)
downloadlinux-726abbc7957a2feeaf6f5e3d72579b3fd0211134.tar.xz
linux-726abbc7957a2feeaf6f5e3d72579b3fd0211134.zip
viafb: refresh rate bug collection
This patch fixes multiple issues with the handling of refresh rates especially for multi-display setups. If you experienced problems with wrong refresh rates this patch might fix them. Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
Diffstat (limited to 'drivers/video/via/hw.c')
-rw-r--r--drivers/video/via/hw.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/drivers/video/via/hw.c b/drivers/video/via/hw.c
index 5728fd76bc11..dc4c778877ce 100644
--- a/drivers/video/via/hw.c
+++ b/drivers/video/via/hw.c
@@ -2002,13 +2002,15 @@ void viafb_fill_crtc_timing(struct crt_mode_table *crt_table,
int i;
int index = 0;
int h_addr, v_addr;
- u32 pll_D_N, clock;
+ u32 pll_D_N, clock, refresh = viafb_refresh;
+
+ if (viafb_SAMM_ON && set_iga == IGA2)
+ refresh = viafb_refresh1;
for (i = 0; i < video_mode->mode_array; i++) {
index = i;
- if (crt_table[i].refresh_rate == viaparinfo->
- crt_setting_info->refresh_rate)
+ if (crt_table[i].refresh_rate == refresh)
break;
}
@@ -2019,7 +2021,7 @@ void viafb_fill_crtc_timing(struct crt_mode_table *crt_table,
if ((viafb_LCD_ON | viafb_DVI_ON)
&& video_mode->crtc[0].crtc.hor_addr == 640
&& video_mode->crtc[0].crtc.ver_addr == 480
- && viaparinfo->crt_setting_info->refresh_rate == 60) {
+ && refresh == 60) {
/* The border is 8 pixels. */
crt_reg.hor_blank_start = crt_reg.hor_blank_start - 8;
@@ -2070,7 +2072,6 @@ void __devinit viafb_init_chip_info(int chip_type)
init_lvds_chip_info();
viaparinfo->crt_setting_info->iga_path = IGA1;
- viaparinfo->crt_setting_info->refresh_rate = viafb_refresh;
/*Set IGA path for each device */
viafb_set_iga_path();
@@ -2083,13 +2084,9 @@ void __devinit viafb_init_chip_info(int chip_type)
viaparinfo->lvds_setting_info->lcd_mode;
}
-void viafb_update_device_setting(int hres, int vres,
- int bpp, int vmode_refresh, int flag)
+void viafb_update_device_setting(int hres, int vres, int bpp, int flag)
{
if (flag == 0) {
- viaparinfo->crt_setting_info->refresh_rate =
- vmode_refresh;
-
viaparinfo->tmds_setting_info->h_active = hres;
viaparinfo->tmds_setting_info->v_active = vres;