vserver 2.0 rc7
[linux-2.6.git] / drivers / video / i810 / i810_main.c
index f11c76a..a9a618f 100644 (file)
@@ -635,7 +635,7 @@ static void i810_save_vga_state(struct i810fb_par *par)
  * DESCRIPTION:
  * Calculates buffer pitch in bytes.  
  */
-u32 get_line_length(struct i810fb_par *par, int xres_virtual, int bpp)
+static u32 get_line_length(struct i810fb_par *par, int xres_virtual, int bpp)
 {
        u32 length;
        
@@ -724,7 +724,7 @@ static void i810_calc_dclk(u32 freq, u32 *m, u32 *n, u32 *p)
  * Description:
  * Shows or hides the hardware cursor
  */
-void i810_enable_cursor(u8 __iomem *mmio, int mode)
+static void i810_enable_cursor(u8 __iomem *mmio, int mode)
 {
        u32 temp;
        
@@ -999,8 +999,16 @@ static int i810_check_params(struct fb_var_screeninfo *var,
        info->monspecs.dclkmin = 15000000;
 
        if (fb_validate_mode(var, info)) {
-               if (fb_get_mode(FB_MAXTIMINGS, 0, var, info))
+               if (fb_get_mode(FB_MAXTIMINGS, 0, var, info)) {
+                       int default_sync = (info->monspecs.hfmin-HFMIN)
+                                               |(info->monspecs.hfmax-HFMAX)
+                                               |(info->monspecs.vfmin-VFMIN)
+                                               |(info->monspecs.vfmax-VFMAX);
+                       printk("i810fb: invalid video mode%s\n",
+                           default_sync ? "" :
+                           ". Specifying vsyncN/hsyncN parameters may help");
                        return -EINVAL;
+               }
        }
        
        var->xres = xres;
@@ -1492,7 +1500,7 @@ static struct fb_ops i810fb_ops __devinitdata = {
 /***********************************************************************
  *                         Power Management                            *
  ***********************************************************************/
-static int i810fb_suspend(struct pci_dev *dev, u32 state)
+static int i810fb_suspend(struct pci_dev *dev, pm_message_t state)
 {
        struct fb_info *info = pci_get_drvdata(dev);
        struct i810fb_par *par = (struct i810fb_par *) info->par;
@@ -1524,7 +1532,7 @@ static int i810fb_suspend(struct pci_dev *dev, u32 state)
                pci_disable_device(dev);
        }
        pci_save_state(dev);
-       pci_set_power_state(dev, state);
+       pci_set_power_state(dev, pci_choose_state(dev, state));
 
        return 0;
 }
@@ -1538,7 +1546,7 @@ static int i810fb_resume(struct pci_dev *dev)
                return 0;
 
        pci_restore_state(dev);
-       pci_set_power_state(dev, 0);
+       pci_set_power_state(dev, PCI_D0);
        pci_enable_device(dev);
        agp_bind_memory(par->i810_gtt.i810_fb_memory,
                        par->fb.offset);
@@ -1591,40 +1599,41 @@ static int __devinit i810_alloc_agp_mem(struct fb_info *info)
 {
        struct i810fb_par *par = (struct i810fb_par *) info->par;
        int size;
+       struct agp_bridge_data *bridge;
        
        i810_fix_offsets(par);
        size = par->fb.size + par->iring.size;
 
-       if (agp_backend_acquire()) {
+       if (!(bridge = agp_backend_acquire(par->dev))) {
                printk("i810fb_alloc_fbmem: cannot acquire agpgart\n");
                return -ENODEV;
        }
        if (!(par->i810_gtt.i810_fb_memory = 
-             agp_allocate_memory(size >> 12, AGP_NORMAL_MEMORY))) {
+             agp_allocate_memory(bridge, size >> 12, AGP_NORMAL_MEMORY))) {
                printk("i810fb_alloc_fbmem: can't allocate framebuffer "
                       "memory\n");
-               agp_backend_release();
+               agp_backend_release(bridge);
                return -ENOMEM;
        }
        if (agp_bind_memory(par->i810_gtt.i810_fb_memory,
                            par->fb.offset)) {
                printk("i810fb_alloc_fbmem: can't bind framebuffer memory\n");
-               agp_backend_release();
+               agp_backend_release(bridge);
                return -EBUSY;
        }       
        
        if (!(par->i810_gtt.i810_cursor_memory = 
-             agp_allocate_memory(par->cursor_heap.size >> 12,
+             agp_allocate_memory(bridge, par->cursor_heap.size >> 12,
                                  AGP_PHYSICAL_MEMORY))) {
                printk("i810fb_alloc_cursormem:  can't allocate" 
                       "cursor memory\n");
-               agp_backend_release();
+               agp_backend_release(bridge);
                return -ENOMEM;
        }
        if (agp_bind_memory(par->i810_gtt.i810_cursor_memory,
                            par->cursor_heap.offset)) {
                printk("i810fb_alloc_cursormem: cannot bind cursor memory\n");
-               agp_backend_release();
+               agp_backend_release(bridge);
                return -EBUSY;
        }       
 
@@ -1632,7 +1641,7 @@ static int __devinit i810_alloc_agp_mem(struct fb_info *info)
 
        i810_fix_pointers(par);
 
-       agp_backend_release();
+       agp_backend_release(bridge);
 
        return 0;
 }
@@ -1804,8 +1813,9 @@ i810_allocate_pci_resource(struct i810fb_par *par,
 
        return 0;
 }
-       
-int __init i810fb_setup(char *options)
+
+#ifndef MODULE
+static int __init i810fb_setup(char *options)
 {
        char *this_opt, *suffix = NULL;
 
@@ -1850,6 +1860,7 @@ int __init i810fb_setup(char *options)
        }
        return 0;
 }
+#endif
 
 static int __devinit i810fb_init_pci (struct pci_dev *dev, 
                                   const struct pci_device_id *entry)
@@ -1976,7 +1987,7 @@ static void __exit i810fb_remove_pci(struct pci_dev *dev)
 }                                                      
 
 #ifndef MODULE
-int __init i810fb_init(void)
+static int __init i810fb_init(void)
 {
        char *option = NULL;
 
@@ -1994,7 +2005,7 @@ int __init i810fb_init(void)
 
 #ifdef MODULE
 
-int __init i810fb_init(void)
+static int __init i810fb_init(void)
 {
        hsync1 *= 1000;
        hsync2 *= 1000;
@@ -2020,10 +2031,10 @@ MODULE_PARM_DESC(vyres, "Virtual vertical resolution in scanlines"
                 " (default = 480)");
 module_param(hsync1, int, 0);
 MODULE_PARM_DESC(hsync1, "Minimum horizontal frequency of monitor in KHz"
-                " (default = 31)");
+                " (default = 29)");
 module_param(hsync2, int, 0);
 MODULE_PARM_DESC(hsync2, "Maximum horizontal frequency of monitor in KHz"
-                " (default = 31)");
+                " (default = 30)");
 module_param(vsync1, int, 0);
 MODULE_PARM_DESC(vsync1, "Minimum vertical frequency of monitor in Hz"
                 " (default = 50)");