ARM: S5PV210: add framebuffer platform helpers for s5pv210 based machines
authorMarek Szyprowski <m.szyprowski@samsung.com>
Thu, 20 May 2010 06:13:04 +0000 (08:13 +0200)
committerBen Dooks <ben-linux@fluff.org>
Thu, 20 May 2010 09:14:52 +0000 (18:14 +0900)
This patch adds common framebuffer device helpers and register defines
for S5PV210 based machines.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
arch/arm/mach-s5pv210/Kconfig
arch/arm/mach-s5pv210/Makefile
arch/arm/mach-s5pv210/include/mach/irqs.h
arch/arm/mach-s5pv210/include/mach/map.h
arch/arm/mach-s5pv210/include/mach/regs-clock.h
arch/arm/mach-s5pv210/setup-fb-24bpp.c [new file with mode: 0644]
arch/arm/plat-samsung/include/plat/fb.h

index 430055b..7d8d93f 100644 (file)
@@ -25,6 +25,11 @@ config MACH_AQUILA
        help
          Machine support for the Samsung Aquila target based on S5PC110 SoC
 
+config S5PV210_SETUP_FB_24BPP
+       bool
+       help
+          Common setup code for S5PV210 with an 24bpp RGB display helper.
+
 config MACH_SMDKV210
        bool "SMDKV210"
        select CPU_S5PV210
index ed3cb6c..2b061a0 100644 (file)
@@ -24,3 +24,4 @@ obj-$(CONFIG_MACH_SMDKC110)   += mach-smdkc110.o
 # device support
 
 obj-y                          += dev-audio.o
+obj-$(CONFIG_S5PV210_SETUP_FB_24BPP)   += setup-fb-24bpp.o
index 62c5175..ee6e07b 100644 (file)
 
 #define NR_IRQS                (IRQ_EINT(31) + 1)
 
+/* Compatibility */
+#define IRQ_LCD_FIFO           IRQ_LCD0
+#define IRQ_LCD_VSYNC          IRQ_LCD1
+#define IRQ_LCD_SYSTEM         IRQ_LCD2
+
 #endif /* ASM_ARCH_IRQS_H */
index 5adcb9f..e6bb12c 100644 (file)
@@ -47,6 +47,8 @@
 #define S5PV210_PA_PDMA0       0xE0900000
 #define S5PV210_PA_PDMA1       0xE0A00000
 
+#define S5PV210_PA_FB          (0xF8000000)
+
 #define S5PV210_PA_VIC0                (0xF2000000)
 #define S5P_PA_VIC0            S5PV210_PA_VIC0
 
@@ -78,5 +80,6 @@
 /* compatibiltiy defines. */
 #define S3C_PA_UART            S5PV210_PA_UART
 #define S3C_PA_IIC             S5PV210_PA_IIC0
+#define S3C_PA_FB              S5PV210_PA_FB
 
 #endif /* __ASM_ARCH_MAP_H */
index e56e0e4..2a25ab4 100644 (file)
 
 #define S5P_RST_STAT           S5P_CLKREG(0xA000)
 #define S5P_OSC_CON            S5P_CLKREG(0x8000)
+#define S5P_MDNIE_SEL          S5P_CLKREG(0x7008)
 #define S5P_MIPI_PHY_CON0      S5P_CLKREG(0x7200)
 #define S5P_MIPI_PHY_CON1      S5P_CLKREG(0x7204)
 #define S5P_MIPI_CONTROL       S5P_CLKREG(0xE814)
diff --git a/arch/arm/mach-s5pv210/setup-fb-24bpp.c b/arch/arm/mach-s5pv210/setup-fb-24bpp.c
new file mode 100644 (file)
index 0000000..a50cbac
--- /dev/null
@@ -0,0 +1,62 @@
+/* linux/arch/arm/plat-s5pv210/setup-fb-24bpp.c
+ *
+ * Copyright (c) 2009-2010 Samsung Electronics Co., Ltd.
+ *             http://www.samsung.com/
+ *
+ * Base s5pv210 setup information for 24bpp LCD framebuffer
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/fb.h>
+
+#include <mach/regs-fb.h>
+#include <mach/gpio.h>
+#include <mach/map.h>
+#include <plat/fb.h>
+#include <mach/regs-clock.h>
+#include <plat/gpio-cfg.h>
+
+void s5pv210_fb_gpio_setup_24bpp(void)
+{
+       unsigned int gpio = 0;
+
+       for (gpio = S5PV210_GPF0(0); gpio <= S5PV210_GPF0(7); gpio++) {
+               s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
+               s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
+               s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4);
+       }
+
+       for (gpio = S5PV210_GPF1(0); gpio <= S5PV210_GPF1(7); gpio++) {
+               s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
+               s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
+               s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4);
+       }
+
+       for (gpio = S5PV210_GPF2(0); gpio <= S5PV210_GPF2(7); gpio++) {
+               s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
+               s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
+               s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4);
+       }
+
+       for (gpio = S5PV210_GPF3(0); gpio <= S5PV210_GPF3(3); gpio++) {
+               s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
+               s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
+               s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4);
+       }
+
+       /* Set DISPLAY_CONTROL register for Display path selection.
+        *
+        * ouput   |   RGB   |   I80   |   ITU
+        * -----------------------------------
+        *  00     |   MIE   |  FIMD   |  FIMD
+        *  01     | MDNIE   | MDNIE   |  FIMD
+        *  10     |  FIMD   |  FIMD   |  FIMD
+        *  11     |  FIMD   |  FIMD   |  FIMD
+        */
+       writel(0x2, S5P_MDNIE_SEL);
+}
index 1f85649..27d3b49 100644 (file)
@@ -84,4 +84,11 @@ extern void s3c64xx_fb_gpio_setup_24bpp(void);
  */
 extern void s5pc100_fb_gpio_setup_24bpp(void);
 
+/**
+ * s5pv210_fb_gpio_setup_24bpp() - S5PV210/S5PC110 setup function for 24bpp LCD
+ *
+ * Initialise the GPIO for an 24bpp LCD display on the RGB interface.
+ */
+extern void s5pv210_fb_gpio_setup_24bpp(void);
+
 #endif /* __PLAT_S3C_FB_H */