X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fvideo%2Fvalkyriefb.c;h=31a2bbc53974e2fd785ade7f0cc8f23f4ebaceb4;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=e6c486281da446a135179c8f50ac483062ad74c2;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/drivers/video/valkyriefb.c b/drivers/video/valkyriefb.c index e6c486281..31a2bbc53 100644 --- a/drivers/video/valkyriefb.c +++ b/drivers/video/valkyriefb.c @@ -89,13 +89,13 @@ struct fb_par_valkyrie { struct fb_info_valkyrie { struct fb_info info; struct fb_par_valkyrie par; - struct cmap_regs *cmap_regs; + struct cmap_regs __iomem *cmap_regs; unsigned long cmap_regs_phys; - struct valkyrie_regs *valkyrie_regs; + struct valkyrie_regs __iomem *valkyrie_regs; unsigned long valkyrie_regs_phys; - __u8 *frame_buffer; + __u8 __iomem *frame_buffer; unsigned long frame_buffer_phys; int sense; @@ -118,9 +118,7 @@ static int valkyriefb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, static int valkyriefb_blank(int blank_mode, struct fb_info *info); static int read_valkyrie_sense(struct fb_info_valkyrie *p); -static inline int valkyrie_vram_reqd(int video_mode, int color_mode); static void set_valkyrie_clock(unsigned char *params); -static inline int valkyrie_par_to_var(struct fb_par_valkyrie *par, struct fb_var_screeninfo *var); static int valkyrie_var_to_par(struct fb_var_screeninfo *var, struct fb_par_valkyrie *par, const struct fb_info *fb_info); @@ -144,7 +142,7 @@ static struct fb_ops valkyriefb_ops = { static int valkyriefb_set_par(struct fb_info *info) { struct fb_info_valkyrie *p = (struct fb_info_valkyrie *) info; - volatile struct valkyrie_regs *valkyrie_regs = p->valkyrie_regs; + volatile struct valkyrie_regs __iomem *valkyrie_regs = p->valkyrie_regs; struct fb_par_valkyrie *par = info->par; struct valkyrie_regvals *init; int err; @@ -171,6 +169,12 @@ static int valkyriefb_set_par(struct fb_info *info) return 0; } +static inline int valkyrie_par_to_var(struct fb_par_valkyrie *par, + struct fb_var_screeninfo *var) +{ + return mac_vmode_to_var(par->vmode, par->cmode, var); +} + static int valkyriefb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) { @@ -203,13 +207,13 @@ static int valkyriefb_blank(int blank_mode, struct fb_info *info) return 1; switch (blank_mode) { - case 0: /* unblank */ + case FB_BLANK_UNBLANK: /* unblank */ out_8(&p->valkyrie_regs->mode.r, init->mode); break; - case 1: + case FB_BLANK_NORMAL: return 1; /* get caller to set CLUT to all black */ - case VESA_VSYNC_SUSPEND+1: - case VESA_HSYNC_SUSPEND+1: + case FB_BLANK_VSYNC_SUSPEND: + case FB_BLANK_HSYNC_SUSPEND: /* * [kps] Value extracted from MacOS. I don't know * whether this bit disables hsync or vsync, or @@ -217,7 +221,7 @@ static int valkyriefb_blank(int blank_mode, struct fb_info *info) */ out_8(&p->valkyrie_regs->mode.r, init->mode | 0x40); break; - case VESA_POWERDOWN+1: + case FB_BLANK_POWERDOWN: out_8(&p->valkyrie_regs->mode.r, 0x66); break; } @@ -228,7 +232,7 @@ static int valkyriefb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, u_int transp, struct fb_info *info) { struct fb_info_valkyrie *p = (struct fb_info_valkyrie *) info; - volatile struct cmap_regs *cmap_regs = p->cmap_regs; + volatile struct cmap_regs __iomem *cmap_regs = p->cmap_regs; struct fb_par_valkyrie *par = info->par; if (regno > 255) @@ -252,7 +256,7 @@ static int valkyriefb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, return 0; } -static int valkyrie_vram_reqd(int video_mode, int color_mode) +static inline int valkyrie_vram_reqd(int video_mode, int color_mode) { int pitch; struct valkyrie_regvals *init = valkyrie_reg_init[video_mode-1]; @@ -318,6 +322,11 @@ int __init valkyriefb_init(void) struct fb_info_valkyrie *p; unsigned long frame_buffer_phys, cmap_regs_phys, flags; int err; + char *option = NULL; + + if (fb_get_options("valkyriefb", &option)) + return -ENODEV; + valkyriefb_setup(option); #ifdef CONFIG_MAC if (!MACH_IS_MAC) @@ -332,21 +341,23 @@ int __init valkyriefb_init(void) cmap_regs_phys = 0x50f24000; flags = IOMAP_NOCACHE_SER; /* IOMAP_WRITETHROUGH?? */ #else /* ppc (!CONFIG_MAC) */ - struct device_node *dp; + { + struct device_node *dp; - dp = find_devices("valkyrie"); - if (dp == 0) - return 0; + dp = find_devices("valkyrie"); + if (dp == 0) + return 0; - if (dp->n_addrs != 1) { - printk(KERN_ERR "expecting 1 address for valkyrie (got %d)\n", - dp->n_addrs); - return 0; - } + if (dp->n_addrs != 1) { + printk(KERN_ERR "expecting 1 address for valkyrie (got %d)\n", + dp->n_addrs); + return 0; + } - frame_buffer_phys = dp->addrs[0].address; - cmap_regs_phys = dp->addrs[0].address+0x304000; - flags = _PAGE_WRITETHRU; + frame_buffer_phys = dp->addrs[0].address; + cmap_regs_phys = dp->addrs[0].address+0x304000; + flags = _PAGE_WRITETHRU; + } #endif /* ppc (!CONFIG_MAC) */ p = kmalloc(sizeof(*p), GFP_ATOMIC); @@ -504,11 +515,6 @@ static int valkyrie_var_to_par(struct fb_var_screeninfo *var, return 0; } -static int valkyrie_par_to_var(struct fb_par_valkyrie *par, struct fb_var_screeninfo *var) -{ - return mac_vmode_to_var(par->vmode, par->cmode, var); -} - static void valkyrie_init_fix(struct fb_fix_screeninfo *fix, struct fb_info_valkyrie *p) { memset(fix, 0, sizeof(*fix)); @@ -540,8 +546,8 @@ static void valkyrie_par_to_fix(struct fb_par_valkyrie *par, static void __init valkyrie_init_info(struct fb_info *info, struct fb_info_valkyrie *p) { info->fbops = &valkyriefb_ops; - info->screen_base = (char *) p->frame_buffer + 0x1000; - info->flags = FBINFO_FLAG_DEFAULT; + info->screen_base = p->frame_buffer + 0x1000; + info->flags = FBINFO_DEFAULT; info->pseudo_palette = p->pseudo_palette; fb_alloc_cmap(&info->cmap, 256, 0); info->par = &p->par; @@ -580,4 +586,5 @@ int __init valkyriefb_setup(char *options) return 0; } +module_init(valkyriefb_init); MODULE_LICENSE("GPL");