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;
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);
.fb_fillrect = cfb_fillrect,
.fb_copyarea = cfb_copyarea,
.fb_imageblit = cfb_imageblit,
- .fb_cursor = soft_cursor,
};
/* Sets the video mode according to info->var */
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;
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)
{
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
*/
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;
}
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)
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];
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)
cmap_regs_phys = 0x50f24000;
flags = IOMAP_NOCACHE_SER; /* IOMAP_WRITETHROUGH?? */
#else /* ppc (!CONFIG_MAC) */
- struct device_node *dp;
+ {
+ struct device_node *dp;
+ struct resource r;
- dp = find_devices("valkyrie");
- if (dp == 0)
- return 0;
+ dp = of_find_node_by_name(NULL, "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 (of_address_to_resource(dp, 0, &r)) {
+ printk(KERN_ERR "can't find address for valkyrie\n");
+ return 0;
+ }
- frame_buffer_phys = dp->addrs[0].address;
- cmap_regs_phys = dp->addrs[0].address+0x304000;
- flags = _PAGE_WRITETHRU;
+ frame_buffer_phys = r.start;
+ cmap_regs_phys = r.start + 0x304000;
+ flags = _PAGE_WRITETHRU;
+ }
#endif /* ppc (!CONFIG_MAC) */
p = kmalloc(sizeof(*p), GFP_ATOMIC);
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));
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;
return 0;
}
+module_init(valkyriefb_init);
MODULE_LICENSE("GPL");