diff options
author | Florian Tobias Schandinat <FlorianSchandinat@gmx.de> | 2009-09-22 19:47:29 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-23 10:39:53 -0400 |
commit | 2d6e8851f608bd0c811f2df83eeff4ad8631e723 (patch) | |
tree | 76aad6e6e48a294d742acc4a0751e5d8ab86bf50 /drivers/video/via/lcd.c | |
parent | 5016af53ebbd1450c2656c94dfbd1dad15c19f60 (diff) |
viafb: improve pitch handling
Split the pitch handling up and replaces the calculation from virtual xres
and bpp with fix.line_length which already contains the pitch and does not
add any constrains for the virtual resolution.
Also add a bit to the second pitch which the documentation mentions but
which was ignored by the driver.
Although it is a bit unclear what the right pitch for some LCD modes is
this patch should have no negative runtime impact.
Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
Cc: Scott Fang <ScottFang@viatech.com.cn>
Cc: Joseph Chan <JosephChan@via.com.tw>
Cc: Harald Welte <laforge@gnumonks.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/video/via/lcd.c')
-rw-r--r-- | drivers/video/via/lcd.c | 10 |
1 files changed, 1 insertions, 9 deletions
diff --git a/drivers/video/via/lcd.c b/drivers/video/via/lcd.c index 144d34bdf0ac..e3e597f937a5 100644 --- a/drivers/video/via/lcd.c +++ b/drivers/video/via/lcd.c | |||
@@ -952,13 +952,10 @@ void viafb_lcd_set_mode(struct crt_mode_table *mode_crt_table, | |||
952 | int video_index = plvds_setting_info->lcd_panel_size; | 952 | int video_index = plvds_setting_info->lcd_panel_size; |
953 | int set_iga = plvds_setting_info->iga_path; | 953 | int set_iga = plvds_setting_info->iga_path; |
954 | int mode_bpp = plvds_setting_info->bpp; | 954 | int mode_bpp = plvds_setting_info->bpp; |
955 | int viafb_load_reg_num = 0; | ||
956 | int reg_value = 0; | ||
957 | int set_hres, set_vres; | 955 | int set_hres, set_vres; |
958 | int panel_hres, panel_vres; | 956 | int panel_hres, panel_vres; |
959 | u32 pll_D_N; | 957 | u32 pll_D_N; |
960 | int offset; | 958 | int offset; |
961 | struct io_register *reg = NULL; | ||
962 | struct display_timing mode_crt_reg, panel_crt_reg; | 959 | struct display_timing mode_crt_reg, panel_crt_reg; |
963 | struct crt_mode_table *panel_crt_table = NULL; | 960 | struct crt_mode_table *panel_crt_table = NULL; |
964 | struct VideoModeTable *vmode_tbl = NULL; | 961 | struct VideoModeTable *vmode_tbl = NULL; |
@@ -1038,16 +1035,11 @@ void viafb_lcd_set_mode(struct crt_mode_table *mode_crt_table, | |||
1038 | } | 1035 | } |
1039 | 1036 | ||
1040 | /* Offset for simultaneous */ | 1037 | /* Offset for simultaneous */ |
1041 | reg_value = offset; | 1038 | viafb_set_secondary_pitch(offset << 3); |
1042 | viafb_load_reg_num = offset_reg.iga2_offset_reg.reg_num; | ||
1043 | reg = offset_reg.iga2_offset_reg.reg; | ||
1044 | viafb_load_reg(reg_value, viafb_load_reg_num, reg, VIACR); | ||
1045 | DEBUG_MSG(KERN_INFO "viafb_load_reg!!\n"); | 1039 | DEBUG_MSG(KERN_INFO "viafb_load_reg!!\n"); |
1046 | viafb_load_fetch_count_reg(set_hres, 4, IGA2); | 1040 | viafb_load_fetch_count_reg(set_hres, 4, IGA2); |
1047 | /* Fetch count for simultaneous */ | 1041 | /* Fetch count for simultaneous */ |
1048 | } else { /* SAMM */ | 1042 | } else { /* SAMM */ |
1049 | /* Offset for IGA2 only */ | ||
1050 | viafb_load_offset_reg(set_hres, mode_bpp / 8, set_iga); | ||
1051 | /* Fetch count for IGA2 only */ | 1043 | /* Fetch count for IGA2 only */ |
1052 | viafb_load_fetch_count_reg(set_hres, mode_bpp / 8, set_iga); | 1044 | viafb_load_fetch_count_reg(set_hres, mode_bpp / 8, set_iga); |
1053 | 1045 | ||