struct display_switch *dispsw;
struct display *display;
struct pci_dev *dev;
- unsigned char *region;
- unsigned char *regs;
+ unsigned char __iomem *region;
+ unsigned char __iomem *regs;
u_int id;
int func_use_count;
u_long ref_ps;
*/
u_char ramdac_ctrl;
u_char ramdac_powerdown;
+
+ u32 pseudo_palette[16];
};
-static char default_font_storage[40];
static char *default_font = "Acorn8x8";
-MODULE_PARM(default_font, "s");
+module_param(default_font, charp, 0);
MODULE_PARM_DESC(default_font, "Default font name");
/*
int i;
switch (blank) {
- case 4: /* powerdown - both sync lines down */
+ case FB_BLANK_POWERDOWN: /* powerdown - both sync lines down */
sync = EXT_SYNC_CTL_VS_0 | EXT_SYNC_CTL_HS_0;
break;
- case 3: /* hsync off */
+ case FB_BLANK_HSYNC_SUSPEND: /* hsync off */
sync = EXT_SYNC_CTL_VS_NORMAL | EXT_SYNC_CTL_HS_0;
break;
- case 2: /* vsync off */
+ case FB_BLANK_VSYNC_SUSPEND: /* vsync off */
sync = EXT_SYNC_CTL_VS_0 | EXT_SYNC_CTL_HS_NORMAL;
break;
- case 1: /* soft blank */
+ case FB_BLANK_NORMAL: /* soft blank */
default: /* unblank */
break;
}
.vmode = FB_VMODE_NONINTERLACED
};
-static char igs_regs[] __devinitdata = {
+static char igs_regs[] = {
EXT_CRT_IRQ, 0,
EXT_CRT_TEST, 0,
EXT_SYNC_CTL, 0,
{
struct cfb_info *cfb;
- cfb = kmalloc(sizeof(struct cfb_info) +
- sizeof(u32) * 16, GFP_KERNEL);
-
+ cfb = kmalloc(sizeof(struct cfb_info), GFP_KERNEL);
if (!cfb)
return NULL;
cfb->fb.var.accel_flags = FB_ACCELF_TEXT;
cfb->fb.fbops = &cyber2000fb_ops;
- cfb->fb.flags = FBINFO_FLAG_DEFAULT;
- cfb->fb.pseudo_palette = (void *)(cfb + 1);
+ cfb->fb.flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN;
+ cfb->fb.pseudo_palette = cfb->pseudo_palette;
fb_alloc_cmap(&cfb->fb.cmap, NR_PALETTE, 0);
return cfb;
}
-static void __devinit
+static void
cyberpro_free_fb_info(struct cfb_info *cfb)
{
if (cfb) {
* Parse Cyber2000fb options. Usage:
* video=cyber2000:font:fontname
*/
-int
+#ifndef MODULE
+static int
cyber2000fb_setup(char *options)
{
char *opt;
continue;
if (strncmp(opt, "font:", 5) == 0) {
+ static char default_font_storage[40];
+
strlcpy(default_font_storage, opt + 5, sizeof(default_font_storage));
default_font = default_font_storage;
continue;
}
return 0;
}
+#endif /* MODULE */
/*
* The CyberPro chips can be placed on many different bus types.
cfb->fb.var.xres, cfb->fb.var.yres,
h_sync / 1000, h_sync % 1000, v_sync);
+ if (cfb->dev)
+ cfb->fb.device = &cfb->dev->dev;
err = register_framebuffer(&cfb->fb);
failed:
}
}
-static int cyberpro_pci_suspend(struct pci_dev *dev, u32 state)
+static int cyberpro_pci_suspend(struct pci_dev *dev, pm_message_t state)
{
return 0;
}
* I don't think we can use the "module_init" stuff here because
* the fbcon stuff may not be initialised yet. Hence the #ifdef
* around module_init.
+ *
+ * Tony: "module_init" is now required
*/
-int __init cyber2000fb_init(void)
+static int __init cyber2000fb_init(void)
{
int ret = -1, err;
+#ifndef MODULE
+ char *option = NULL;
+
+ if (fb_get_options("cyber2000fb", &option))
+ return -ENODEV;
+ cyber2000fb_setup(option);
+#endif
+
#ifdef CONFIG_ARCH_SHARK
err = cyberpro_vl_probe();
if (!err) {
ret = 0;
- MOD_INC_USE_COUNT;
+ __module_get(THIS_MODULE);
}
#endif
#ifdef CONFIG_PCI
- err = pci_module_init(&cyberpro_driver);
+ err = pci_register_driver(&cyberpro_driver);
if (!err)
ret = 0;
#endif
pci_unregister_driver(&cyberpro_driver);
}
-#ifdef MODULE
module_init(cyber2000fb_init);
-#endif
module_exit(cyberpro_exit);
MODULE_AUTHOR("Russell King");