aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/platinumfb.c
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2005-12-13 01:48:35 -0500
committerPaul Mackerras <paulus@samba.org>2006-01-08 22:53:51 -0500
commit9cf84d7c97992dbe5360b241327341c07ce30fc9 (patch)
treede606aa77fb0d8c4d4c32106ac4fe7fa287cf27e /drivers/video/platinumfb.c
parentf75225d0a01e4f468b0395b02e549d2763bbabfb (diff)
[PATCH] powerpc: Fix platinumfb for some modes
The platinumfb driver used only on some powermacs has an issue with some video modes & limited VRAM. This patch fixes it. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'drivers/video/platinumfb.c')
-rw-r--r--drivers/video/platinumfb.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/video/platinumfb.c b/drivers/video/platinumfb.c
index ca4082ae5a18..ba0af1b66bb6 100644
--- a/drivers/video/platinumfb.c
+++ b/drivers/video/platinumfb.c
@@ -138,13 +138,15 @@ static int platinumfb_set_par (struct fb_info *info)
138 138
139 init = platinum_reg_init[pinfo->vmode-1]; 139 init = platinum_reg_init[pinfo->vmode-1];
140 140
141 if (pinfo->vmode == 13 && pinfo->cmode > 0) 141 if ((pinfo->vmode == VMODE_832_624_75) && (pinfo->cmode > CMODE_8))
142 offset = 0x10; 142 offset = 0x10;
143
143 info->screen_base = pinfo->frame_buffer + init->fb_offset + offset; 144 info->screen_base = pinfo->frame_buffer + init->fb_offset + offset;
144 info->fix.smem_start = (pinfo->frame_buffer_phys) + init->fb_offset + offset; 145 info->fix.smem_start = (pinfo->frame_buffer_phys) + init->fb_offset + offset;
145 info->fix.visual = (pinfo->cmode == CMODE_8) ? 146 info->fix.visual = (pinfo->cmode == CMODE_8) ?
146 FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_DIRECTCOLOR; 147 FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_DIRECTCOLOR;
147 info->fix.line_length = vmode_attrs[pinfo->vmode-1].hres * (1<<pinfo->cmode) + offset; 148 info->fix.line_length = vmode_attrs[pinfo->vmode-1].hres * (1<<pinfo->cmode)
149 + offset;
148 printk("line_length: %x\n", info->fix.line_length); 150 printk("line_length: %x\n", info->fix.line_length);
149 return 0; 151 return 0;
150} 152}
@@ -221,7 +223,9 @@ static int platinumfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
221static inline int platinum_vram_reqd(int video_mode, int color_mode) 223static inline int platinum_vram_reqd(int video_mode, int color_mode)
222{ 224{
223 return vmode_attrs[video_mode-1].vres * 225 return vmode_attrs[video_mode-1].vres *
224 (vmode_attrs[video_mode-1].hres * (1<<color_mode) + 0x20) +0x1000; 226 (vmode_attrs[video_mode-1].hres * (1<<color_mode) +
227 ((video_mode == VMODE_832_624_75) &&
228 (color_mode > CMODE_8)) ? 0x10 : 0x20) + 0x1000;
225} 229}
226 230
227#define STORE_D2(a, d) { \ 231#define STORE_D2(a, d) { \