{
pm2type_t type; /* Board type */
u32 fb_size; /* framebuffer memory size */
- unsigned char __iomem *v_fb; /* virtual address of frame buffer */
- unsigned char __iomem *v_regs;/* virtual address of p_regs */
+ unsigned char* v_fb; /* virtual address of frame buffer */
+ unsigned char* v_regs; /* virtual address of p_regs */
u32 memclock; /* memclock */
u32 video; /* video flags before blanking */
};
* Utility functions
*/
-inline static u32 RD32(unsigned char __iomem *base, s32 off)
+inline static u32 RD32(unsigned char* base, s32 off)
{
return fb_readl(base + off);
}
-inline static void WR32(unsigned char __iomem *base, s32 off, u32 v)
+inline static void WR32(unsigned char* base, s32 off, u32 v)
{
fb_writel(v, base + off);
}
green = CNVT_TOHW(green, info->var.green.length);
blue = CNVT_TOHW(blue, info->var.blue.length);
transp = CNVT_TOHW(transp, info->var.transp.length);
+ set_color(par, regno, red, green, blue);
break;
case FB_VISUAL_DIRECTCOLOR:
/* example here assumes 8 bit DAC. Might be different
switch (info->var.bits_per_pixel) {
case 8:
+ /* Yes some hand held devices have this. */
+ ((u8*)(info->pseudo_palette))[regno] = v;
break;
case 16:
+ ((u16*)(info->pseudo_palette))[regno] = v;
+ break;
case 24:
case 32:
((u32*)(info->pseudo_palette))[regno] = v;
}
return 0;
}
- else if (info->fix.visual == FB_VISUAL_PSEUDOCOLOR)
- set_color(par, regno, red, green, blue);
-
+ /* ... */
return 0;
}
DPRINTK("blank_mode %d\n", blank_mode);
+ /* Turn everything on, then disable as requested. */
+ video |= (PM2F_VIDEO_ENABLE | PM2F_HSYNC_MASK | PM2F_VSYNC_MASK);
+
switch (blank_mode) {
- case FB_BLANK_UNBLANK:
- /* Screen: On */
- video |= PM2F_VIDEO_ENABLE;
+ case 0: /* Screen: On; HSync: On, VSync: On */
break;
- case FB_BLANK_NORMAL:
- /* Screen: Off */
+ case 1: /* Screen: Off; HSync: On, VSync: On */
video &= ~PM2F_VIDEO_ENABLE;
break;
- case FB_BLANK_VSYNC_SUSPEND:
- /* VSync: Off */
- video &= ~(PM2F_VSYNC_MASK | PM2F_BLANK_LOW );
+ case 2: /* Screen: Off; HSync: On, VSync: Off */
+ video &= ~(PM2F_VIDEO_ENABLE | PM2F_VSYNC_MASK | PM2F_BLANK_LOW );
break;
- case FB_BLANK_HSYNC_SUSPEND:
- /* HSync: Off */
- video &= ~(PM2F_HSYNC_MASK | PM2F_BLANK_LOW );
+ case 3: /* Screen: Off; HSync: Off, VSync: On */
+ video &= ~(PM2F_VIDEO_ENABLE | PM2F_HSYNC_MASK | PM2F_BLANK_LOW );
break;
- case FB_BLANK_POWERDOWN:
- /* HSync: Off, VSync: Off */
- video &= ~(PM2F_VSYNC_MASK | PM2F_HSYNC_MASK| PM2F_BLANK_LOW);
+ case 4: /* Screen: Off; HSync: Off, VSync: Off */
+ video &= ~(PM2F_VIDEO_ENABLE | PM2F_VSYNC_MASK | PM2F_HSYNC_MASK|
+ PM2F_BLANK_LOW);
break;
}
set_video(par, video);
err_exit_all:
fb_dealloc_cmap(&info->cmap);
err_exit_both:
- iounmap(info->screen_base);
+ iounmap((void*) pm2fb_fix.smem_start);
release_mem_region(pm2fb_fix.smem_start, pm2fb_fix.smem_len);
err_exit_mmio:
- iounmap(default_par->v_regs);
+ iounmap((void*) pm2fb_fix.mmio_start);
release_mem_region(pm2fb_fix.mmio_start, pm2fb_fix.mmio_len);
err_exit_neither:
framebuffer_release(info);
{
struct fb_info* info = pci_get_drvdata(pdev);
struct fb_fix_screeninfo* fix = &info->fix;
- struct pm2fb_par *par = info->par;
-
+
unregister_framebuffer(info);
- iounmap(info->screen_base);
+ iounmap((void*) fix->smem_start);
release_mem_region(fix->smem_start, fix->smem_len);
- iounmap(par->v_regs);
+ iounmap((void*) fix->mmio_start);
release_mem_region(fix->mmio_start, fix->mmio_len);
pci_set_drvdata(pdev, NULL);