Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-serial
[pandora-kernel.git] / drivers / video / nvidia / nvidia.c
index b02d603..eb24107 100644 (file)
@@ -14,7 +14,6 @@
 #include <linux/errno.h>
 #include <linux/string.h>
 #include <linux/mm.h>
-#include <linux/tty.h>
 #include <linux/slab.h>
 #include <linux/delay.h>
 #include <linux/fb.h>
 #include <asm/prom.h>
 #include <asm/pci-bridge.h>
 #endif
+#ifdef CONFIG_BOOTX_TEXT
+#include <asm/btext.h>
+#endif
 
 #include "nv_local.h"
 #include "nv_type.h"
 #include "nv_proto.h"
 #include "nv_dma.h"
 
-#ifndef CONFIG_PCI             /* sanity check */
-#error This driver requires PCI support.
-#endif
-
 #undef CONFIG_FB_NVIDIA_DEBUG
 #ifdef CONFIG_FB_NVIDIA_DEBUG
 #define NVTRACE          printk
@@ -686,6 +684,13 @@ static int nvidiafb_set_par(struct fb_info *info)
 
        nvidia_vga_protect(par, 0);
 
+#ifdef CONFIG_BOOTX_TEXT
+       /* Update debug text engine */
+       btext_update_display(info->fix.smem_start,
+                            info->var.xres, info->var.yres,
+                            info->var.bits_per_pixel, info->fix.line_length);
+#endif
+
        NVTRACE_LEAVE();
        return 0;
 }
@@ -933,16 +938,7 @@ static int nvidiafb_blank(int blank, struct fb_info *info)
        NVWriteSeq(par, 0x01, tmp);
        NVWriteCrtc(par, 0x1a, vesa);
 
-#ifdef CONFIG_FB_NVIDIA_BACKLIGHT
-       mutex_lock(&info->bl_mutex);
-       if (info->bl_dev) {
-               down(&info->bl_dev->sem);
-               info->bl_dev->props->power = blank;
-               info->bl_dev->props->update_status(info->bl_dev);
-               up(&info->bl_dev->sem);
-       }
-       mutex_unlock(&info->bl_mutex);
-#endif
+       nvidia_bl_set_power(info, blank);
 
        NVTRACE_LEAVE();
 
@@ -964,24 +960,25 @@ static struct fb_ops nvidia_fb_ops = {
 };
 
 #ifdef CONFIG_PM
-static int nvidiafb_suspend(struct pci_dev *dev, pm_message_t state)
+static int nvidiafb_suspend(struct pci_dev *dev, pm_message_t mesg)
 {
        struct fb_info *info = pci_get_drvdata(dev);
        struct nvidia_par *par = info->par;
 
+       if (mesg.event == PM_EVENT_PRETHAW)
+               mesg.event = PM_EVENT_FREEZE;
        acquire_console_sem();
-       par->pm_state = state.event;
+       par->pm_state = mesg.event;
 
-       if (state.event == PM_EVENT_FREEZE) {
-               dev->dev.power.power_state = state;
-       } else {
+       if (mesg.event == PM_EVENT_SUSPEND) {
                fb_set_suspend(info, 1);
                nvidiafb_blank(FB_BLANK_POWERDOWN, info);
                nvidia_write_regs(par, &par->SavedReg);
                pci_save_state(dev);
                pci_disable_device(dev);
-               pci_set_power_state(dev, pci_choose_state(dev, state));
+               pci_set_power_state(dev, pci_choose_state(dev, mesg));
        }
+       dev->dev.power.power_state = mesg;
 
        release_console_sem();
        return 0;
@@ -997,7 +994,10 @@ static int nvidiafb_resume(struct pci_dev *dev)
 
        if (par->pm_state != PM_EVENT_FREEZE) {
                pci_restore_state(dev);
-               pci_enable_device(dev);
+
+               if (pci_enable_device(dev))
+                       goto fail;
+
                pci_set_master(dev);
        }
 
@@ -1006,6 +1006,7 @@ static int nvidiafb_resume(struct pci_dev *dev)
        fb_set_suspend (info, 0);
        nvidiafb_blank(FB_BLANK_UNBLANK, info);
 
+fail:
        release_console_sem();
        return 0;
 }
@@ -1313,20 +1314,19 @@ static int __devinit nvidiafb_probe(struct pci_dev *pd,
 
        nvidia_save_vga(par, &par->SavedReg);
 
+       pci_set_drvdata(pd, info);
+       nvidia_bl_init(par);
        if (register_framebuffer(info) < 0) {
                printk(KERN_ERR PFX "error registering nVidia framebuffer\n");
                goto err_out_iounmap_fb;
        }
 
-       pci_set_drvdata(pd, info);
 
        printk(KERN_INFO PFX
               "PCI nVidia %s framebuffer (%dMB @ 0x%lX)\n",
               info->fix.id,
               par->FbMapSize / (1024 * 1024), info->fix.smem_start);
 
-       nvidia_bl_init(par);
-
        NVTRACE_LEAVE();
        return 0;