ARM: 6643/1: ep93xx: add framebuffer support to edb93xx boards
authorHartley Sweeten <hartleys@visionengravers.com>
Thu, 27 Jan 2011 16:50:53 +0000 (17:50 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sat, 5 Feb 2011 09:49:40 +0000 (09:49 +0000)
The ep9307, ep9312, and ep9315 variants of the ep93xx processor include
the raster engine needed for framebuffer support.

This allows the EDB93xx boards with those processors to use the
framebuffer driver.

Tested on an EDB9307A with the following kernel parameters:
video=640x480-16@60
video=1024x768-16@60

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Acked-by: Ryan Mallon <ryan@bluewatersys.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mach-ep93xx/edb93xx.c

index 4b04316521318fb025c0821c9b4c63f52ae60f72..fad371df40edfe75164f522d0432bbad809f10dc 100644 (file)
@@ -32,6 +32,7 @@
 #include <linux/i2c-gpio.h>
 
 #include <mach/hardware.h>
+#include <mach/fb.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -111,6 +112,37 @@ static void __init edb93xx_register_pwm(void)
 }
 
 
+/*************************************************************************
+ * EDB93xx framebuffer
+ *************************************************************************/
+static struct ep93xxfb_mach_info __initdata edb93xxfb_info = {
+       .num_modes      = EP93XXFB_USE_MODEDB,
+       .bpp            = 16,
+       .flags          = 0,
+};
+
+static int __init edb93xx_has_fb(void)
+{
+       /* These platforms have an ep93xx with video capability */
+       return machine_is_edb9307() || machine_is_edb9307a() ||
+              machine_is_edb9312() || machine_is_edb9315() ||
+              machine_is_edb9315a();
+}
+
+static void __init edb93xx_register_fb(void)
+{
+       if (!edb93xx_has_fb())
+               return;
+
+       if (machine_is_edb9307a() || machine_is_edb9315a())
+               edb93xxfb_info.flags |= EP93XXFB_USE_SDCSN0;
+       else
+               edb93xxfb_info.flags |= EP93XXFB_USE_SDCSN3;
+
+       ep93xx_register_fb(&edb93xxfb_info);
+}
+
+
 static void __init edb93xx_init_machine(void)
 {
        ep93xx_init_devices();
@@ -118,6 +150,7 @@ static void __init edb93xx_init_machine(void)
        ep93xx_register_eth(&edb93xx_eth_data, 1);
        edb93xx_register_i2c();
        edb93xx_register_pwm();
+       edb93xx_register_fb();
 }