intelfb: support 945GME (as used in ASUS Eee 901)
[safe/jmp/linux-2.6] / drivers / video / imxfb.c
index 267c1ff..ccd9861 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/string.h>
 #include <linux/interrupt.h>
 #include <linux/slab.h>
+#include <linux/mm.h>
 #include <linux/fb.h>
 #include <linux/delay.h>
 #include <linux/init.h>
 #include <linux/platform_device.h>
 #include <linux/dma-mapping.h>
 
-#include <asm/hardware.h>
+#include <mach/hardware.h>
 #include <asm/io.h>
-#include <asm/uaccess.h>
-#include <asm/arch/imxfb.h>
+#include <mach/imxfb.h>
 
 /*
  * Complain if VAR is out of range.
@@ -394,26 +394,18 @@ static void imxfb_setup_gpio(struct imxfb_info *fbi)
 
        /* initialize GPIOs */
        imx_gpio_mode(PD6_PF_LSCLK);
-       imx_gpio_mode(PD10_PF_SPL_SPR);
        imx_gpio_mode(PD11_PF_CONTRAST);
        imx_gpio_mode(PD14_PF_FLM_VSYNC);
        imx_gpio_mode(PD13_PF_LP_HSYNC);
-       imx_gpio_mode(PD7_PF_REV);
-       imx_gpio_mode(PD8_PF_CLS);
-
-#ifndef CONFIG_MACH_PIMX1
-       /* on PiMX1 used as buffers enable signal
-        */
-       imx_gpio_mode(PD9_PF_PS);
-#endif
-
-#ifndef CONFIG_MACH_MX1FS2
-       /* on mx1fs2 this pin is used to (de)activate the display, so we need
-        * it as a normal gpio
-        */
        imx_gpio_mode(PD12_PF_ACD_OE);
-#endif
 
+       /* These are only needed for Sharp HR TFT displays */
+       if (fbi->pcr & PCR_SHARP) {
+               imx_gpio_mode(PD7_PF_REV);
+               imx_gpio_mode(PD8_PF_CLS);
+               imx_gpio_mode(PD9_PF_PS);
+               imx_gpio_mode(PD10_PF_SPL_SPR);
+       }
 }
 
 #ifdef CONFIG_PM
@@ -424,7 +416,7 @@ static void imxfb_setup_gpio(struct imxfb_info *fbi)
 static int imxfb_suspend(struct platform_device *dev, pm_message_t state)
 {
        struct imxfb_info *fbi = platform_get_drvdata(dev);
-       pr_debug("%s\n",__FUNCTION__);
+       pr_debug("%s\n",__func__);
 
        imxfb_disable_controller(fbi);
        return 0;
@@ -433,7 +425,7 @@ static int imxfb_suspend(struct platform_device *dev, pm_message_t state)
 static int imxfb_resume(struct platform_device *dev)
 {
        struct imxfb_info *fbi = platform_get_drvdata(dev);
-       pr_debug("%s\n",__FUNCTION__);
+       pr_debug("%s\n",__func__);
 
        imxfb_enable_controller(fbi);
        return 0;
@@ -449,7 +441,7 @@ static int __init imxfb_init_fbinfo(struct device *dev)
        struct fb_info *info = dev_get_drvdata(dev);
        struct imxfb_info *fbi = info->par;
 
-       pr_debug("%s\n",__FUNCTION__);
+       pr_debug("%s\n",__func__);
 
        info->pseudo_palette = kmalloc( sizeof(u32) * 16, GFP_KERNEL);
        if (!info->pseudo_palette)
@@ -475,8 +467,7 @@ static int __init imxfb_init_fbinfo(struct device *dev)
        info->var.vmode = FB_VMODE_NONINTERLACED;
 
        info->fbops                     = &imxfb_ops;
-       info->flags                     = FBINFO_FLAG_DEFAULT;
-       info->pseudo_palette            = (fbi + 1);
+       info->flags                     = FBINFO_FLAG_DEFAULT | FBINFO_READS_FAST;
 
        fbi->rgb[RGB_16]                = &def_rgb_16;
        fbi->rgb[RGB_8]                 = &def_rgb_8;
@@ -489,6 +480,7 @@ static int __init imxfb_init_fbinfo(struct device *dev)
        info->var.yres_virtual          = inf->yres;
        fbi->max_bpp                    = inf->bpp;
        info->var.bits_per_pixel        = inf->bpp;
+       info->var.nonstd                = inf->nonstd;
        info->var.pixclock              = inf->pixclock;
        info->var.hsync_len             = inf->hsync_len;
        info->var.left_margin           = inf->left_margin;
@@ -499,6 +491,7 @@ static int __init imxfb_init_fbinfo(struct device *dev)
        info->var.sync                  = inf->sync;
        info->var.grayscale             = inf->cmap_greyscale;
        fbi->cmap_inverse               = inf->cmap_inverse;
+       fbi->cmap_static                = inf->cmap_static;
        fbi->pcr                        = inf->pcr;
        fbi->lscr1                      = inf->lscr1;
        fbi->dmacr                      = inf->dmacr;