[ARM] pxa: Add Colibri LCD functions
authorDaniel Mack <daniel@caiaq.de>
Mon, 23 Mar 2009 01:04:19 +0000 (02:04 +0100)
committerEric Miao <eric.miao@marvell.com>
Mon, 23 Mar 2009 01:59:55 +0000 (09:59 +0800)
This adds LCD functions for Colibri PXA300 and Colibri PXA320 and
configures a LQ043T3DX02 panel.

Original-code-by: Matthias Meier <matthias.j.meier@gmx.net>
Signed-off-by: Daniel Mack <daniel@caiaq.de>
Signed-off-by: Eric Miao <eric.miao@marvell.com>
arch/arm/mach-pxa/colibri-pxa300.c
arch/arm/mach-pxa/colibri-pxa320.c
arch/arm/mach-pxa/colibri-pxa3xx.c
arch/arm/mach-pxa/include/mach/colibri.h

index 14ef9bf094fa2e0b1f5c8139eef99c23864ffcab..2858a597870935cec8f2aadf0cebc1b0a6c54d8d 100644 (file)
@@ -25,6 +25,7 @@
 #include <mach/pxa300.h>
 #include <mach/colibri.h>
 #include <mach/ohci.h>
+#include <mach/pxafb.h>
 
 #include "generic.h"
 #include "devices.h"
@@ -106,10 +107,49 @@ static mfp_cfg_t colibri_pxa300_mmc_pin_config[] __initdata = {
        GPIO6_MMC1_DAT3,
 };
 
+#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
+static mfp_cfg_t colibri_pxa300_lcd_pin_config[] __initdata = {
+       GPIO54_LCD_LDD_0,
+       GPIO55_LCD_LDD_1,
+       GPIO56_LCD_LDD_2,
+       GPIO57_LCD_LDD_3,
+       GPIO58_LCD_LDD_4,
+       GPIO59_LCD_LDD_5,
+       GPIO60_LCD_LDD_6,
+       GPIO61_LCD_LDD_7,
+       GPIO62_LCD_LDD_8,
+       GPIO63_LCD_LDD_9,
+       GPIO64_LCD_LDD_10,
+       GPIO65_LCD_LDD_11,
+       GPIO66_LCD_LDD_12,
+       GPIO67_LCD_LDD_13,
+       GPIO68_LCD_LDD_14,
+       GPIO69_LCD_LDD_15,
+       GPIO70_LCD_LDD_16,
+       GPIO71_LCD_LDD_17,
+       GPIO62_LCD_CS_N,
+       GPIO72_LCD_FCLK,
+       GPIO73_LCD_LCLK,
+       GPIO74_LCD_PCLK,
+       GPIO75_LCD_BIAS,
+       GPIO76_LCD_VSYNC,
+};
+
+static void __init colibri_pxa300_init_lcd(void)
+{
+       pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa300_lcd_pin_config));
+}
+
+#else
+static inline void colibri_pxa300_init_lcd(void) {}
+#endif /* CONFIG_FB_PXA || CONFIG_FB_PXA_MODULE */
+
 void __init colibri_pxa300_init(void)
 {
        colibri_pxa300_init_eth();
        colibri_pxa300_init_ohci();
+       colibri_pxa300_init_lcd();
+       colibri_pxa3xx_init_lcd(mfp_to_gpio(GPIO49_GPIO));
        colibri_pxa3xx_init_mmc(ARRAY_AND_SIZE(colibri_pxa300_mmc_pin_config),
                                mfp_to_gpio(MFP_PIN_GPIO13));
 }
index 86cb202847e8de62a8f8adc12ebe679e8d95f645..b6773674351823e97aaf53160a4fefe390df81af 100644 (file)
@@ -25,6 +25,7 @@
 #include <mach/pxa3xx-regs.h>
 #include <mach/mfp-pxa320.h>
 #include <mach/colibri.h>
+#include <mach/pxafb.h>
 #include <mach/ohci.h>
 
 #include "generic.h"
@@ -108,10 +109,48 @@ static mfp_cfg_t colibri_pxa320_mmc_pin_config[] __initdata = {
        GPIO21_MMC1_DAT3
 };
 
+#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
+static mfp_cfg_t colibri_pxa320_lcd_pin_config[] __initdata = {
+       GPIO6_2_LCD_LDD_0,
+       GPIO7_2_LCD_LDD_1,
+       GPIO8_2_LCD_LDD_2,
+       GPIO9_2_LCD_LDD_3,
+       GPIO10_2_LCD_LDD_4,
+       GPIO11_2_LCD_LDD_5,
+       GPIO12_2_LCD_LDD_6,
+       GPIO13_2_LCD_LDD_7,
+       GPIO63_LCD_LDD_8,
+       GPIO64_LCD_LDD_9,
+       GPIO65_LCD_LDD_10,
+       GPIO66_LCD_LDD_11,
+       GPIO67_LCD_LDD_12,
+       GPIO68_LCD_LDD_13,
+       GPIO69_LCD_LDD_14,
+       GPIO70_LCD_LDD_15,
+       GPIO71_LCD_LDD_16,
+       GPIO72_LCD_LDD_17,
+       GPIO73_LCD_CS_N,
+       GPIO74_LCD_VSYNC,
+       GPIO14_2_LCD_FCLK,
+       GPIO15_2_LCD_LCLK,
+       GPIO16_2_LCD_PCLK,
+       GPIO17_2_LCD_BIAS,
+};
+
+static void __init colibri_pxa320_init_lcd(void)
+{
+       pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa320_lcd_pin_config));
+}
+#else
+static inline void colibri_pxa320_init_lcd(void) {}
+#endif
+
 void __init colibri_pxa320_init(void)
 {
        colibri_pxa320_init_eth();
        colibri_pxa320_init_ohci();
+       colibri_pxa320_init_lcd();
+       colibri_pxa3xx_init_lcd(mfp_to_gpio(GPIO39_GPIO));
        colibri_pxa3xx_init_mmc(ARRAY_AND_SIZE(colibri_pxa320_mmc_pin_config),
                                mfp_to_gpio(MFP_PIN_GPIO28));
 }
index cbaa8424fc86fab2eb2cc1585021ca70fdbbf0e6..12d0afc54aa5342cd97cda940d3206d98866dab9 100644 (file)
@@ -23,6 +23,7 @@
 #include <mach/mfp-pxa300.h>
 #include <mach/colibri.h>
 #include <mach/mmc.h>
+#include <mach/pxafb.h>
 
 #include "generic.h"
 #include "devices.h"
@@ -73,3 +74,48 @@ void __init colibri_pxa3xx_init_mmc(mfp_cfg_t *pins, int len, int detect_pin)
 }
 #endif /* CONFIG_MMC_PXA || CONFIG_MMC_PXA_MODULE */
 
+#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
+static int lcd_bl_pin;
+
+/*
+ * LCD panel (Sharp LQ043T3DX02)
+ */
+static void colibri_lcd_backlight(int on)
+{
+       gpio_set_value(lcd_bl_pin, !!on);
+}
+
+static struct pxafb_mode_info sharp_lq43_mode = {
+       .pixclock       = 101936,
+       .xres           = 480,
+       .yres           = 272,
+       .bpp            = 32,
+       .depth          = 18,
+       .hsync_len      = 41,
+       .left_margin    = 2,
+       .right_margin   = 2,
+       .vsync_len      = 10,
+       .upper_margin   = 2,
+       .lower_margin   = 2,
+       .sync           = 0,
+       .cmap_greyscale = 0,
+};
+
+static struct pxafb_mach_info sharp_lq43_info = {
+       .modes          = &sharp_lq43_mode,
+       .num_modes      = 1,
+       .cmap_inverse   = 0,
+       .cmap_static    = 0,
+       .lcd_conn       = LCD_COLOR_TFT_18BPP,
+       .pxafb_backlight_power = colibri_lcd_backlight,
+};
+
+void __init colibri_pxa3xx_init_lcd(int bl_pin)
+{
+       lcd_bl_pin = bl_pin;
+       gpio_request(bl_pin, "lcd backlight");
+       gpio_direction_output(bl_pin, 0);
+       set_pxa_fb_info(&sharp_lq43_info);
+}
+#endif
+
index 0becf6215c1d1985ff4de4e05b859583826c4492..3f2a01d6a03c6563c377761a42ba586f2cd9d5bd 100644 (file)
@@ -10,6 +10,12 @@ extern void colibri_pxa3xx_init_mmc(mfp_cfg_t *pins, int len, int detect_pin);
 static inline void colibri_pxa3xx_init_mmc(mfp_cfg_t *, int, int) {}
 #endif
 
+#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
+extern void colibri_pxa3xx_init_lcd(int bl_pin);
+#else
+static inline void colibri_pxa3xx_init_lcd(int) {}
+#endif
+
 /* physical memory regions */
 #define COLIBRI_SDRAM_BASE     0xa0000000      /* SDRAM region */