vserver 1.9.5.x5
[linux-2.6.git] / drivers / video / radeonfb.c
index 9f258b0..9a2e3ad 100644 (file)
@@ -360,13 +360,13 @@ struct radeonfb_info {
        unsigned long mmio_base_phys;
        unsigned long fb_base_phys;
 
-       unsigned long mmio_base;
-       unsigned long fb_base;
+       void __iomem *mmio_base;
+       void __iomem *fb_base;
 
        struct pci_dev *pdev;
 
        unsigned char *EDID;
-       unsigned char *bios_seg;
+       unsigned char __iomem *bios_seg;
 
        u32 pseudo_palette[17];
        struct { u8 red, green, blue, pad; } palette[256];
@@ -621,30 +621,6 @@ static void _radeon_engine_reset(struct radeonfb_info *rinfo)
 #define radeon_engine_reset()          _radeon_engine_reset(rinfo)
 
 
-static __inline__ u8 radeon_get_post_div_bitval(int post_div)
-{
-        switch (post_div) {
-                case 1:
-                        return 0x00;
-                case 2: 
-                        return 0x01;
-                case 3: 
-                        return 0x04;
-                case 4:
-                        return 0x02;
-                case 6:
-                        return 0x06;
-                case 8:
-                        return 0x03;
-                case 12:
-                        return 0x07;
-                default:
-                        return 0x02;
-        }
-}
-
-
-
 static __inline__ int round_div(int num, int den)
 {
         return (num + (den / 2)) / den;
@@ -702,8 +678,8 @@ static void radeon_write_mode (struct radeonfb_info *rinfo,
 static int __devinit radeon_set_fbinfo (struct radeonfb_info *rinfo);
 static int __devinit radeon_init_disp (struct radeonfb_info *rinfo);
 static int radeon_init_disp_var (struct radeonfb_info *rinfo, struct fb_var_screeninfo *var);
-static char *radeon_find_rom(struct radeonfb_info *rinfo);
-static void radeon_get_pllinfo(struct radeonfb_info *rinfo, char *bios_seg);
+static void __iomem *radeon_find_rom(struct radeonfb_info *rinfo);
+static void radeon_get_pllinfo(struct radeonfb_info *rinfo, void __iomem *bios_seg);
 static void radeon_get_moninfo (struct radeonfb_info *rinfo);
 static int radeon_get_dfpinfo (struct radeonfb_info *rinfo);
 static int radeon_get_dfpinfo_BIOS(struct radeonfb_info *rinfo);
@@ -735,12 +711,12 @@ static struct backlight_controller radeon_backlight_controller = {
 #endif /* CONFIG_PPC_OF */
 
 
-static char *radeon_find_rom(struct radeonfb_info *rinfo)
+static void __iomem *radeon_find_rom(struct radeonfb_info *rinfo)
 {       
 #if defined(__i386__)
         u32  segstart;
-        char *rom_base;
-        char *rom;
+        char __iomem *rom_base;
+        char __iomem *rom;
         int  stage;
         int  i,j;       
         char aty_rom_sig[] = "761295520";
@@ -753,7 +729,7 @@ static char *radeon_find_rom(struct radeonfb_info *rinfo)
                         
                 stage = 1;
                 
-                rom_base = (char *)ioremap(segstart, 0x1000);
+                rom_base = ioremap(segstart, 0x1000);
 
                 if ((*rom_base == 0x55) && (((*(rom_base + 1)) & 0xff) == 0xaa))
                         stage = 2;
@@ -804,10 +780,10 @@ static char *radeon_find_rom(struct radeonfb_info *rinfo)
 
 
 
-static void radeon_get_pllinfo(struct radeonfb_info *rinfo, char *bios_seg)
+static void radeon_get_pllinfo(struct radeonfb_info *rinfo, void __iomem *bios_seg)
 {
-        void *bios_header;
-        void *header_ptr;
+        void __iomem *bios_header;
+        void __iomem *header_ptr;
         u16 bios_header_offset, pll_info_offset;
         PLL_BLOCK pll;
 
@@ -838,7 +814,7 @@ static void radeon_get_pllinfo(struct radeonfb_info *rinfo, char *bios_seg)
                if (radeon_read_OF(rinfo)) {
                        unsigned int tmp, Nx, M, ref_div, xclk;
 
-                       tmp = INPLL(X_MPLL_REF_FB_DIV);
+                       tmp = INPLL(M_SPLL_REF_FB_DIV);
                        ref_div = INPLL(PPLL_REF_DIV) & 0x3ff;
 
                        Nx = (tmp & 0xff00) >> 8;
@@ -1077,7 +1053,7 @@ static void radeon_update_default_var(struct radeonfb_info *rinfo)
 
 static int radeon_get_dfpinfo_BIOS(struct radeonfb_info *rinfo)
 {
-       char *fpbiosstart, *tmp, *tmp0;
+       char __iomem *fpbiosstart, *tmp, *tmp0;
        char stmp[30];
        int i;
 
@@ -1221,7 +1197,7 @@ static int radeon_read_OF (struct radeonfb_info *rinfo)
 
        dp = pci_device_to_OF_node(rinfo->pdev);
 
-       xtal = (unsigned int *) get_property(dp, "ATY,RefCLK", 0);
+       xtal = (unsigned int *) get_property(dp, "ATY,RefCLK", NULL);
 
        rinfo->pll.ref_clk = *xtal / 10;
 
@@ -1544,7 +1520,7 @@ static int radeonfb_ioctl (struct inode *inode, struct file *file, unsigned int
                                        break;
                        }
 
-                       rc = get_user(value, (__u32*)arg);
+                       rc = get_user(value, (__u32 __user *)arg);
 
                        if (rc)
                                return rc;
@@ -1598,7 +1574,7 @@ static int radeonfb_ioctl (struct inode *inode, struct file *file, unsigned int
                        if (CRTC_CRT_ON & tmp)
                                value |= 0x02;
 
-                       return put_user(value, (__u32*)arg);
+                       return put_user(value, (__u32 __user *)arg);
                default:
                        return -EINVAL;
        }
@@ -1629,15 +1605,16 @@ static int radeonfb_blank (int blank, struct fb_info *info)
        val2 &= ~(LVDS_DISPLAY_DIS);
 
         switch (blank) {
-                case VESA_NO_BLANKING:
+               case FB_BLANK_UNBLANK:
+               case FB_BLANK_NORMAL:
                         break;
-                case VESA_VSYNC_SUSPEND:
+                case FB_BLANK_VSYNC_SUSPEND:
                         val |= (CRTC_DISPLAY_DIS | CRTC_VSYNC_DIS);
                         break;
-                case VESA_HSYNC_SUSPEND:
+                case FB_BLANK_HSYNC_SUSPEND:
                         val |= (CRTC_DISPLAY_DIS | CRTC_HSYNC_DIS);
                         break;
-                case VESA_POWERDOWN:
+                case FB_BLANK_POWERDOWN:
                         val |= (CRTC_DISPLAY_DIS | CRTC_VSYNC_DIS | 
                                 CRTC_HSYNC_DIS);
                        val2 |= (LVDS_DISPLAY_DIS);
@@ -1654,7 +1631,8 @@ static int radeonfb_blank (int blank, struct fb_info *info)
                        break;
        }
 
-       return 0;
+       /* let fbcon do a soft blank for us */
+       return (blank == FB_BLANK_NORMAL) ? 1 : 0;
 }
 
 
@@ -2247,12 +2225,11 @@ static int __devinit radeon_set_fbinfo (struct radeonfb_info *rinfo)
 
        info = &rinfo->info;
 
-       info->currcon = -1;
        info->par = rinfo;
        info->pseudo_palette = rinfo->pseudo_palette;
-        info->flags = FBINFO_FLAG_DEFAULT;
+        info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN;
         info->fbops = &radeonfb_ops;
-        info->screen_base = (char *)rinfo->fb_base;
+        info->screen_base = rinfo->fb_base;
 
        /* Fill fix common fields */
        strlcpy(info->fix.id, rinfo->name, sizeof(info->fix.id));
@@ -2851,7 +2828,7 @@ static int radeonfb_pci_register (struct pci_dev *pdev,
        }
 
        /* map the regions */
-       rinfo->mmio_base = (unsigned long) ioremap (rinfo->mmio_base_phys, RADEON_REGSIZE);
+       rinfo->mmio_base = ioremap (rinfo->mmio_base_phys, RADEON_REGSIZE);
        if (!rinfo->mmio_base) {
                printk ("radeonfb: cannot map MMIO\n");
                release_mem_region (rinfo->mmio_base_phys,
@@ -2978,7 +2955,7 @@ static int radeonfb_pci_register (struct pci_dev *pdev,
        if ((rinfo->dviDisp_type == MT_DFP) || (rinfo->dviDisp_type == MT_LCD) ||
            (rinfo->crtDisp_type == MT_DFP)) {
                if (!radeon_get_dfpinfo(rinfo)) {
-                       iounmap ((void*)rinfo->mmio_base);
+                       iounmap(rinfo->mmio_base);
                        release_mem_region (rinfo->mmio_base_phys,
                                            pci_resource_len(pdev, 2));
                        release_mem_region (rinfo->fb_base_phys,
@@ -2988,10 +2965,10 @@ static int radeonfb_pci_register (struct pci_dev *pdev,
                }
        }
 
-       rinfo->fb_base = (unsigned long) ioremap (rinfo->fb_base_phys, rinfo->video_ram);
+       rinfo->fb_base = ioremap (rinfo->fb_base_phys, rinfo->video_ram);
        if (!rinfo->fb_base) {
                printk ("radeonfb: cannot map FB\n");
-               iounmap ((void*)rinfo->mmio_base);
+               iounmap(rinfo->mmio_base);
                release_mem_region (rinfo->mmio_base_phys,
                                    pci_resource_len(pdev, 2));
                release_mem_region (rinfo->fb_base_phys,
@@ -3040,11 +3017,11 @@ static int radeonfb_pci_register (struct pci_dev *pdev,
        pci_set_drvdata(pdev, rinfo);
        rinfo->next = board_list;
        board_list = rinfo;
-
+       ((struct fb_info *) rinfo)->device = &pdev->dev;
        if (register_framebuffer ((struct fb_info *) rinfo) < 0) {
                printk ("radeonfb: could not register framebuffer\n");
-               iounmap ((void*)rinfo->fb_base);
-               iounmap ((void*)rinfo->mmio_base);
+               iounmap(rinfo->fb_base);
+               iounmap(rinfo->mmio_base);
                release_mem_region (rinfo->mmio_base_phys,
                                    pci_resource_len(pdev, 2));
                release_mem_region (rinfo->fb_base_phys,
@@ -3113,8 +3090,8 @@ static void __devexit radeonfb_pci_unregister (struct pci_dev *pdev)
 
         unregister_framebuffer ((struct fb_info *) rinfo);
                 
-        iounmap ((void*)rinfo->mmio_base);
-        iounmap ((void*)rinfo->fb_base);
+        iounmap(rinfo->mmio_base);
+        iounmap(rinfo->fb_base);
  
        release_mem_region (rinfo->mmio_base_phys,
                            pci_resource_len(pdev, 2));
@@ -3132,9 +3109,17 @@ static struct pci_driver radeonfb_driver = {
        .remove         = __devexit_p(radeonfb_pci_unregister),
 };
 
+int __init radeonfb_old_setup (char *options);
 
 int __init radeonfb_old_init (void)
 {
+#ifndef MODULE
+       char *option = NULL;
+
+       if (fb_get_options("radeonfb_old", &option))
+               return -ENODEV;
+       radeonfb_old_setup(option);
+#endif
        return pci_module_init (&radeonfb_driver);
 }
 
@@ -3172,8 +3157,9 @@ int __init radeonfb_old_setup (char *options)
        return 0;
 }
 
-#ifdef MODULE
 module_init(radeonfb_old_init);
+
+#ifdef MODULE
 module_exit(radeonfb_old_exit);
 #endif