|
@@ -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.
|
|
@@ -23,11 +24,14 @@
|
|
|
*/
|
|
|
|
|
|
#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");
|
|
|
+}
|