summaryrefslogtreecommitdiffstats
path: root/arch/arm/boards/freescale-mx28-evk
diff options
context:
space:
mode:
authorAllan Heldgaard <allan.heldgaard@prevas.dk>2012-03-26 20:02:02 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2012-04-02 10:12:09 +0200
commit8fe12d91ff409d96649ad862fbf70bc89289d65b (patch)
tree4286d4e7a83ca5ea7b1f171de73fbf23143e94d7 /arch/arm/boards/freescale-mx28-evk
parentb1df39c28c7f2d34a978eb2b7a3a271b47211ebc (diff)
downloadbarebox-8fe12d91ff409d96649ad862fbf70bc89289d65b.tar.gz
barebox-8fe12d91ff409d96649ad862fbf70bc89289d65b.tar.xz
mx28-evk: Add LCD support
Derived from TX28 board code (tx28-stk5.c). Signed-off-by: Allan Heldgaard <allan.heldgaard@prevas.dk> Signed-off-by: Esben Haabendal <esben.haabendal@prevas.dk> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/boards/freescale-mx28-evk')
-rw-r--r--arch/arm/boards/freescale-mx28-evk/mx28-evk.c86
1 files changed, 86 insertions, 0 deletions
diff --git a/arch/arm/boards/freescale-mx28-evk/mx28-evk.c b/arch/arm/boards/freescale-mx28-evk/mx28-evk.c
index b80b910f54..9168ed8823 100644
--- a/arch/arm/boards/freescale-mx28-evk/mx28-evk.c
+++ b/arch/arm/boards/freescale-mx28-evk/mx28-evk.c
@@ -31,6 +31,8 @@
#include <asm/armlinux.h>
#include <asm/mmu.h>
+#include <mach/fb.h>
+
#include <generated/mach-types.h>
#define MX28EVK_FEC_PHY_RESET_GPIO 141
@@ -73,6 +75,39 @@ static const uint32_t mx28evk_pads[] = {
PWM3_GPIO | VE_3_3V | GPIO_OUT | GPIO_VALUE(0),
/* MCI write protect 1 = not protected */
SSP1_SCK_GPIO | VE_3_3V | GPIO_IN,
+
+ /* lcd */
+ LCD_WR_RWN_LCD_HSYNC | VE_3_3V | STRENGTH(S8MA),
+ LCD_RD_E_LCD_VSYNC | VE_3_3V | STRENGTH(S8MA),
+ LCD_CS_LCD_ENABLE | VE_3_3V | STRENGTH(S8MA),
+ LCD_RS_LCD_DOTCLK | VE_3_3V | STRENGTH(S8MA),
+ LCD_D0 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D1 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D2 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D3 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D4 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D5 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D6 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D7 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D8 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D9 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D10 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D11 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D12 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D13 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D14 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D15 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D16 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D17 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D18 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D19 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D20 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D21 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D22 | VE_3_3V | STRENGTH(S8MA),
+ LCD_D23 | VE_3_3V | STRENGTH(S8MA),
+ LCD_RESET_GPIO | VE_3_3V | GPIO_OUT | GPIO_VALUE(0),
+ /* backlight */
+ PWM2_GPIO | VE_3_3V | STRENGTH(S4MA) | SE | VE,
};
static struct mxs_mci_platform_data mci_pdata = {
@@ -95,6 +130,54 @@ static struct fec_platform_data fec_info = {
.phy_addr = 0,
};
+/* LCD */
+static struct fb_videomode mx28_evk_vmodes[] = {
+ {
+ .name = "43WVF1G-0",
+ .refresh = 60,
+ .xres = 800,
+ .yres = 480,
+ .pixclock = 29851 /* (33,5 MHz) */,
+ .left_margin = 89,
+ .hsync_len = 10,
+ .right_margin = 164,
+ .upper_margin = 23,
+ .vsync_len = 10,
+ .lower_margin = 10,
+ .sync = FB_SYNC_DE_HIGH_ACT | FB_SYNC_CLK_INVERT,
+ .vmode = FB_VMODE_NONINTERLACED,
+ .flag = 0,
+ }
+};
+
+#define MAX_FB_SIZE SZ_2M
+
+#define GPIO_LCD_RESET 126 /* Reset */
+#define GPIO_BACKLIGHT 114 /* Backlight active */
+
+static void mx28_evk_fb_enable(int enable)
+{
+ gpio_direction_output(GPIO_LCD_RESET, enable);
+
+ /* Give the display a chance to sync before we enable
+ * the backlight to avoid flickering
+ */
+ if (enable)
+ mdelay(200);
+
+ gpio_direction_output(GPIO_BACKLIGHT, enable);
+}
+
+static struct imx_fb_platformdata mx28_evk_fb_pdata = {
+ .mode_list = mx28_evk_vmodes,
+ .mode_cnt = ARRAY_SIZE(mx28_evk_vmodes),
+ .dotclk_delay = 0, /* no adaption required */
+ .ld_intf_width = STMLCDIF_24BIT, /* full 24 bit */
+ .bits_per_pixel = 32,
+ .fixed_screen = NULL,
+ .enable = mx28_evk_fb_enable,
+};
+
static int mx28_evk_mem_init(void)
{
arm_add_mem_device("ram0", IMX_MEMORY_BASE, 128 * 1024 * 1024);
@@ -122,6 +205,9 @@ static int mx28_evk_devices_init(void)
add_generic_device("mxs_mci", 0, NULL, IMX_SSP0_BASE, 0,
IORESOURCE_MEM, &mci_pdata);
+ add_generic_device("stmfb", 0, NULL, IMX_FB_BASE, 4096,
+ IORESOURCE_MEM, &mx28_evk_fb_pdata);
+
imx_enable_enetclk();
mx28_evk_fec_reset();
add_generic_device("fec_imx", 0, NULL, IMX_FEC0_BASE, 0,