vserver 1.9.5.x5
[linux-2.6.git] / drivers / video / valkyriefb.c
index e6c4862..31a2bbc 100644 (file)
@@ -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");