]> git.sur5r.net Git - u-boot/commitdiff
EXYNOS: support TRATS board display function
authorDonghwa Lee <dh09.lee@samsung.com>
Thu, 5 Apr 2012 19:36:27 +0000 (19:36 +0000)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Tue, 15 May 2012 06:31:30 +0000 (08:31 +0200)
This patch support TRATS board configuration and display function.

Signed-off-by: Donghwa Lee <dh09.lee@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
board/samsung/trats/trats.c
include/configs/trats.h

index a7b4e4a4f99e02770d0632fe5ad94c955d4cd8c6..f0775fd038f3a14188249693881043f52204fa65 100644 (file)
@@ -2,6 +2,7 @@
  * Copyright (C) 2011 Samsung Electronics
  * Heungjun Kim <riverful.kim@samsung.com>
  * Kyungmin Park <kyungmin.park@samsung.com>
+ * Donghwa Lee <dh09.lee@samsung.com>
  *
  * See file CREDITS for list of people who contributed to this
  * project.
  */
 
 #include <common.h>
+#include <lcd.h>
 #include <asm/io.h>
 #include <asm/arch/cpu.h>
 #include <asm/arch/gpio.h>
 #include <asm/arch/mmc.h>
 #include <asm/arch/clock.h>
+#include <asm/arch/clk.h>
+#include <asm/arch/mipi_dsim.h>
 #include <asm/arch/watchdog.h>
 #include <asm/arch/power.h>
 #include <pmic.h>
@@ -357,3 +361,145 @@ int board_early_init_f(void)
 
        return 0;
 }
+
+static void lcd_reset(void)
+{
+       struct exynos4_gpio_part2 *gpio2 =
+               (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2();
+
+       s5p_gpio_direction_output(&gpio2->y4, 5, 1);
+       udelay(10000);
+       s5p_gpio_direction_output(&gpio2->y4, 5, 0);
+       udelay(10000);
+       s5p_gpio_direction_output(&gpio2->y4, 5, 1);
+}
+
+static int lcd_power(void)
+{
+       int ret = 0;
+       struct pmic *p = get_pmic();
+
+       if (pmic_probe(p))
+               return 0;
+
+       /* LDO15 voltage: 2.2v */
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO15CTRL, 0x1c | EN_LDO);
+       /* LDO13 voltage: 3.0v */
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO13CTRL, 0x2c | EN_LDO);
+
+       if (ret) {
+               puts("MAX8997 LDO setting error!\n");
+               return -1;
+       }
+
+       return 0;
+}
+
+static struct mipi_dsim_config dsim_config = {
+       .e_interface            = DSIM_VIDEO,
+       .e_virtual_ch           = DSIM_VIRTUAL_CH_0,
+       .e_pixel_format         = DSIM_24BPP_888,
+       .e_burst_mode           = DSIM_BURST_SYNC_EVENT,
+       .e_no_data_lane         = DSIM_DATA_LANE_4,
+       .e_byte_clk             = DSIM_PLL_OUT_DIV8,
+       .hfp                    = 1,
+
+       .p                      = 3,
+       .m                      = 120,
+       .s                      = 1,
+
+       /* D-PHY PLL stable time spec :min = 200usec ~ max 400usec */
+       .pll_stable_time        = 500,
+
+       /* escape clk : 10MHz */
+       .esc_clk                = 20 * 1000000,
+
+       /* stop state holding counter after bta change count 0 ~ 0xfff */
+       .stop_holding_cnt       = 0x7ff,
+       /* bta timeout 0 ~ 0xff */
+       .bta_timeout            = 0xff,
+       /* lp rx timeout 0 ~ 0xffff */
+       .rx_timeout             = 0xffff,
+};
+
+static struct exynos_platform_mipi_dsim s6e8ax0_platform_data = {
+       .lcd_panel_info = NULL,
+       .dsim_config = &dsim_config,
+};
+
+static struct mipi_dsim_lcd_device mipi_lcd_device = {
+       .name   = "s6e8ax0",
+       .id     = -1,
+       .bus_id = 0,
+       .platform_data  = (void *)&s6e8ax0_platform_data,
+};
+
+static int mipi_power(void)
+{
+       int ret = 0;
+       struct pmic *p = get_pmic();
+
+       if (pmic_probe(p))
+               return 0;
+
+       /* LDO3 voltage: 1.1v */
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO3CTRL, 0x6 | EN_LDO);
+       /* LDO4 voltage: 1.8v */
+       ret |= pmic_reg_write(p, MAX8997_REG_LDO4CTRL, 0x14 | EN_LDO);
+
+       if (ret) {
+               puts("MAX8997 LDO setting error!\n");
+               return -1;
+       }
+
+       return 0;
+}
+
+void init_panel_info(vidinfo_t *vid)
+{
+       vid->vl_freq    = 60;
+       vid->vl_col     = 720;
+       vid->vl_row     = 1280;
+       vid->vl_width   = 720;
+       vid->vl_height  = 1280;
+       vid->vl_clkp    = CONFIG_SYS_HIGH;
+       vid->vl_hsp     = CONFIG_SYS_LOW;
+       vid->vl_vsp     = CONFIG_SYS_LOW;
+       vid->vl_dp      = CONFIG_SYS_LOW;
+
+       vid->vl_bpix    = 32;
+       vid->dual_lcd_enabled = 0;
+
+       /* s6e8ax0 Panel */
+       vid->vl_hspw    = 5;
+       vid->vl_hbpd    = 10;
+       vid->vl_hfpd    = 10;
+
+       vid->vl_vspw    = 2;
+       vid->vl_vbpd    = 1;
+       vid->vl_vfpd    = 13;
+       vid->vl_cmd_allow_len = 0xf;
+
+       vid->win_id = 3;
+       vid->cfg_gpio = NULL;
+       vid->backlight_on = NULL;
+       vid->lcd_power_on = NULL;       /* lcd_power_on in mipi dsi driver */
+       vid->reset_lcd = lcd_reset;
+
+       vid->init_delay = 0;
+       vid->power_on_delay = 0;
+       vid->reset_delay = 0;
+       vid->interface_mode = FIMD_RGB_INTERFACE;
+       vid->mipi_enabled = 1;
+
+       strcpy(s6e8ax0_platform_data.lcd_panel_name, mipi_lcd_device.name);
+       s6e8ax0_platform_data.lcd_power = lcd_power;
+       s6e8ax0_platform_data.mipi_power = mipi_power;
+       s6e8ax0_platform_data.phy_enable = set_mipi_phy_ctrl;
+       s6e8ax0_platform_data.lcd_panel_info = (void *)vid;
+       exynos_mipi_dsi_register_lcd_device(&mipi_lcd_device);
+       s6e8ax0_init();
+       exynos_set_dsim_platform_data(&s6e8ax0_platform_data);
+
+       setenv("lcdinfo", "lcd=s6e8ax0");
+}
index 1bc2bb212e50d876ae9a1eb1c28cbd00e97a1b72..5f913ca9ac0309bacc8e6499a257609e0da6516e 100644 (file)
 #define CONFIG_USB_GADGET_S3C_UDC_OTG
 #define CONFIG_USB_GADGET_DUALSPEED
 
+/* LCD */
+#define CONFIG_EXYNOS_FB
+#define CONFIG_LCD
+#define CONFIG_FB_ADDR         0x52504000
+#define CONFIG_S6E8AX0
+#define CONFIG_EXYNOS_MIPI_DSIM
+#define CONFIG_SYS_VIDEO_LOGO_MAX_SIZE (1280 * 720 * 4)
+
 #endif /* __CONFIG_H */