diff options
author | Ondrej Zary <linux@rainbow-software.org> | 2011-03-01 14:18:27 -0500 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2011-03-22 02:49:53 -0400 |
commit | 3827d10ed4278323b75bf25d09c146c050519254 (patch) | |
tree | db1061c67573cf888f47349110fbfb5c5d2b3bd2 /drivers/video/s3fb.c | |
parent | 5694f9ce5801d58bfc1b011592a5e460cc0a274b (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.c | 18 |
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); |