Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[pandora-kernel.git] / arch / mips / sni / setup.c
index 68d7cf6..6edbb30 100644 (file)
@@ -6,7 +6,7 @@
  * for more details.
  *
  * Copyright (C) 1996, 97, 98, 2000, 03, 04, 06 Ralf Baechle (ralf@linux-mips.org)
- * Copyright (C) 2006 Thomas Bogendoerfer (tsbogend@alpha.franken.de)
+ * Copyright (C) 2006,2007 Thomas Bogendoerfer (tsbogend@alpha.franken.de)
  */
 #include <linux/eisa.h>
 #include <linux/init.h>
@@ -26,7 +26,6 @@
 unsigned int sni_brd_type;
 
 extern void sni_machine_restart(char *command);
-extern void sni_machine_halt(void);
 extern void sni_machine_power_off(void);
 
 static void __init sni_display_setup(void)
@@ -87,8 +86,38 @@ void __init plat_mem_setup(void)
        }
 
        _machine_restart = sni_machine_restart;
-       _machine_halt = sni_machine_halt;
        pm_power_off = sni_machine_power_off;
 
        sni_display_setup();
 }
+
+#if CONFIG_PCI
+
+#include <linux/pci.h>
+#include <video/vga.h>
+#include <video/cirrus.h>
+
+static void __devinit quirk_cirrus_ram_size(struct pci_dev *dev)
+{
+       u16 cmd;
+
+       /*
+        * firmware doesn't set the ram size correct, so we
+        * need to do it here, otherwise we get screen corruption
+        * on older Cirrus chips
+        */
+       pci_read_config_word (dev, PCI_COMMAND, &cmd);
+       if ((cmd & (PCI_COMMAND_IO|PCI_COMMAND_MEMORY))
+               == (PCI_COMMAND_IO|PCI_COMMAND_MEMORY)) {
+               vga_wseq (NULL, CL_SEQR6, 0x12);        /* unlock all extension registers */
+               vga_wseq (NULL, CL_SEQRF, 0x18);
+       }
+}
+
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CIRRUS, PCI_DEVICE_ID_CIRRUS_5434_8,
+                        quirk_cirrus_ram_size);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CIRRUS, PCI_DEVICE_ID_CIRRUS_5436,
+                        quirk_cirrus_ram_size);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CIRRUS, PCI_DEVICE_ID_CIRRUS_5446,
+                        quirk_cirrus_ram_size);
+#endif