diff options
author | Krzysztof Helt <krzysztof.h1@wp.pl> | 2009-03-31 18:25:13 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-01 11:59:28 -0400 |
commit | 527410ff7fc5d45fe41523c0ba061113dea22017 (patch) | |
tree | d10016fad7c224f09b572dcab4e3ab46c7ec8f86 | |
parent | bc5d8ac02f24d68efe8e267c96dd75c0531009ab (diff) |
cirrusfb: GD5446 fixes
Various fixes to make Cirrus GD5446 chip work.
Another Cirrus chip works with the cirrusfb. The gd5446 seems very
similar to Alpine chips.
Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | drivers/video/cirrusfb.c | 27 |
1 files changed, 9 insertions, 18 deletions
diff --git a/drivers/video/cirrusfb.c b/drivers/video/cirrusfb.c index ffc514df2452..6603273f4ce5 100644 --- a/drivers/video/cirrusfb.c +++ b/drivers/video/cirrusfb.c | |||
@@ -198,9 +198,11 @@ static const struct cirrusfb_board_info_rec { | |||
198 | .init_sr07 = true, | 198 | .init_sr07 = true, |
199 | .init_sr1f = false, | 199 | .init_sr1f = false, |
200 | .scrn_start_bit19 = true, | 200 | .scrn_start_bit19 = true, |
201 | .sr07 = 0x20, | 201 | .sr07 = 0xA0, |
202 | .sr07_1bpp = 0x20, | 202 | .sr07_1bpp = 0xA0, |
203 | .sr07_8bpp = 0x21, | 203 | .sr07_1bpp_mux = 0xA6, |
204 | .sr07_8bpp = 0xA1, | ||
205 | .sr07_8bpp_mux = 0xA7, | ||
204 | .sr1f = 0 | 206 | .sr1f = 0 |
205 | }, | 207 | }, |
206 | [BT_ALPINE] = { | 208 | [BT_ALPINE] = { |
@@ -213,8 +215,8 @@ static const struct cirrusfb_board_info_rec { | |||
213 | .init_sr1f = true, | 215 | .init_sr1f = true, |
214 | .scrn_start_bit19 = true, | 216 | .scrn_start_bit19 = true, |
215 | .sr07 = 0xA0, | 217 | .sr07 = 0xA0, |
216 | .sr07_1bpp = 0xA1, | 218 | .sr07_1bpp = 0xA0, |
217 | .sr07_1bpp_mux = 0xA7, | 219 | .sr07_1bpp_mux = 0xA6, |
218 | .sr07_8bpp = 0xA1, | 220 | .sr07_8bpp = 0xA1, |
219 | .sr07_8bpp_mux = 0xA7, | 221 | .sr07_8bpp_mux = 0xA7, |
220 | .sr1f = 0x1C | 222 | .sr1f = 0x1C |
@@ -821,7 +823,7 @@ static int cirrusfb_set_par_foo(struct fb_info *info) | |||
821 | /* formula: VClk = (OSC * N) / (D * (1+P)) */ | 823 | /* formula: VClk = (OSC * N) / (D * (1+P)) */ |
822 | /* Example: VClk = (14.31818 * 91) / (23 * (1+1)) = 28.325 MHz */ | 824 | /* Example: VClk = (14.31818 * 91) / (23 * (1+1)) = 28.325 MHz */ |
823 | 825 | ||
824 | if (cinfo->btype == BT_ALPINE) { | 826 | if (cinfo->btype == BT_ALPINE || cinfo->btype == BT_PICASSO4) { |
825 | /* if freq is close to mclk or mclk/2 select mclk | 827 | /* if freq is close to mclk or mclk/2 select mclk |
826 | * as clock source | 828 | * as clock source |
827 | */ | 829 | */ |
@@ -1044,9 +1046,6 @@ static int cirrusfb_set_par_foo(struct fb_info *info) | |||
1044 | /* ### INCOMPLETE!! */ | 1046 | /* ### INCOMPLETE!! */ |
1045 | vga_wseq(regbase, CL_SEQRF, 0xb8); | 1047 | vga_wseq(regbase, CL_SEQRF, 0xb8); |
1046 | #endif | 1048 | #endif |
1047 | /* vga_wseq(regbase, CL_SEQR1F, 0x1c); */ | ||
1048 | break; | ||
1049 | |||
1050 | case BT_ALPINE: | 1049 | case BT_ALPINE: |
1051 | /* We already set SRF and SR1F */ | 1050 | /* We already set SRF and SR1F */ |
1052 | break; | 1051 | break; |
@@ -1106,10 +1105,6 @@ static int cirrusfb_set_par_foo(struct fb_info *info) | |||
1106 | break; | 1105 | break; |
1107 | 1106 | ||
1108 | case BT_PICASSO4: | 1107 | case BT_PICASSO4: |
1109 | vga_wseq(regbase, CL_SEQR7, 0x27); | ||
1110 | /* vga_wseq(regbase, CL_SEQR1F, 0x1c); */ | ||
1111 | break; | ||
1112 | |||
1113 | case BT_ALPINE: | 1108 | case BT_ALPINE: |
1114 | vga_wseq(regbase, CL_SEQR7, 0xa7); | 1109 | vga_wseq(regbase, CL_SEQR7, 0xa7); |
1115 | break; | 1110 | break; |
@@ -1177,10 +1172,6 @@ static int cirrusfb_set_par_foo(struct fb_info *info) | |||
1177 | break; | 1172 | break; |
1178 | 1173 | ||
1179 | case BT_PICASSO4: | 1174 | case BT_PICASSO4: |
1180 | vga_wseq(regbase, CL_SEQR7, 0x25); | ||
1181 | /* vga_wseq(regbase, CL_SEQR1F, 0x1c); */ | ||
1182 | break; | ||
1183 | |||
1184 | case BT_ALPINE: | 1175 | case BT_ALPINE: |
1185 | vga_wseq(regbase, CL_SEQR7, 0xa9); | 1176 | vga_wseq(regbase, CL_SEQR7, 0xa9); |
1186 | break; | 1177 | break; |
@@ -2678,7 +2669,7 @@ static void cirrusfb_set_blitter(u8 __iomem *regbase, | |||
2678 | vga_wgfx(regbase, CL_GR32, 0x0d); /* BLT ROP */ | 2669 | vga_wgfx(regbase, CL_GR32, 0x0d); /* BLT ROP */ |
2679 | 2670 | ||
2680 | /* and finally: GO! */ | 2671 | /* and finally: GO! */ |
2681 | vga_wgfx(regbase, CL_GR31, 0x82); /* BLT Start/status */ | 2672 | vga_wgfx(regbase, CL_GR31, 0x02); /* BLT Start/status */ |
2682 | } | 2673 | } |
2683 | 2674 | ||
2684 | /******************************************************************* | 2675 | /******************************************************************* |