aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/s3fb.c
diff options
context:
space:
mode:
authorOndrej Zary <linux@rainbow-software.org>2011-03-01 14:18:27 -0500
committerPaul Mundt <lethal@linux-sh.org>2011-03-22 02:49:53 -0400
commit3827d10ed4278323b75bf25d09c146c050519254 (patch)
treedb1061c67573cf888f47349110fbfb5c5d2b3bd2 /drivers/video/s3fb.c
parent5694f9ce5801d58bfc1b011592a5e460cc0a274b (diff)
s3fb: fix 15/16bpp modes with over 115MHz pixclocks on 86C365 Trio3D
Enable pixel multiplexing in 15/16bpp modes when pixclock is over 115MHz on Trio3D (86C365) cards to fix artifacts on the left side of screen. Signed-off-by: Ondrej Zary <linux@rainbow-software.org> Acked-by: Ondrej Zajicek <santiago@crfreenet.org> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'drivers/video/s3fb.c')
-rw-r--r--drivers/video/s3fb.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/video/s3fb.c b/drivers/video/s3fb.c
index be12145681f6..7b8fdc6d9d55 100644
--- a/drivers/video/s3fb.c
+++ b/drivers/video/s3fb.c
@@ -675,6 +675,15 @@ static int s3fb_set_par(struct fb_info *info)
675 svga_wcrt_mask(par->state.vgabase, 0x67, 0x20, 0xF0); 675 svga_wcrt_mask(par->state.vgabase, 0x67, 0x20, 0xF0);
676 else 676 else
677 svga_wcrt_mask(par->state.vgabase, 0x67, 0x30, 0xF0); 677 svga_wcrt_mask(par->state.vgabase, 0x67, 0x30, 0xF0);
678 } else if (par->chip == CHIP_365_TRIO3D) {
679 svga_wcrt_mask(par->state.vgabase, 0x50, 0x10, 0x30);
680 if (info->var.pixclock > 8695) {
681 svga_wcrt_mask(par->state.vgabase, 0x67, 0x30, 0xF0);
682 hmul = 2;
683 } else {
684 svga_wcrt_mask(par->state.vgabase, 0x67, 0x20, 0xF0);
685 multiplex = 1;
686 }
678 } else { 687 } else {
679 svga_wcrt_mask(par->state.vgabase, 0x50, 0x10, 0x30); 688 svga_wcrt_mask(par->state.vgabase, 0x50, 0x10, 0x30);
680 svga_wcrt_mask(par->state.vgabase, 0x67, 0x30, 0xF0); 689 svga_wcrt_mask(par->state.vgabase, 0x67, 0x30, 0xF0);
@@ -691,6 +700,15 @@ static int s3fb_set_par(struct fb_info *info)
691 svga_wcrt_mask(par->state.vgabase, 0x67, 0x40, 0xF0); 700 svga_wcrt_mask(par->state.vgabase, 0x67, 0x40, 0xF0);
692 else 701 else
693 svga_wcrt_mask(par->state.vgabase, 0x67, 0x50, 0xF0); 702 svga_wcrt_mask(par->state.vgabase, 0x67, 0x50, 0xF0);
703 } else if (par->chip == CHIP_365_TRIO3D) {
704 svga_wcrt_mask(par->state.vgabase, 0x50, 0x10, 0x30);
705 if (info->var.pixclock > 8695) {
706 svga_wcrt_mask(par->state.vgabase, 0x67, 0x50, 0xF0);
707 hmul = 2;
708 } else {
709 svga_wcrt_mask(par->state.vgabase, 0x67, 0x40, 0xF0);
710 multiplex = 1;
711 }
694 } else { 712 } else {
695 svga_wcrt_mask(par->state.vgabase, 0x50, 0x10, 0x30); 713 svga_wcrt_mask(par->state.vgabase, 0x50, 0x10, 0x30);
696 svga_wcrt_mask(par->state.vgabase, 0x67, 0x50, 0xF0); 714 svga_wcrt_mask(par->state.vgabase, 0x67, 0x50, 0xF0);