void __init exynos5_universal5420_display_init(void)
{
	struct resource *res;
	struct clk *mout_mdnie1;
	struct clk *mout_mpll;

	/* GPIO CONFIG */
	gpio_request(GPIO_LCD_EN, "LCD_EN");
	gpio_request_one(GPIO_TCON_RDY, GPIOF_IN, "TCON_RDY");

	gpio_request(GPIO_TCON_INTR, "TCON_INTR");
	s3c_gpio_setpull(GPIO_TCON_INTR, S3C_GPIO_PULL_DOWN);
	s5p_register_gpio_interrupt(GPIO_TCON_INTR);
	tcon_irq = gpio_to_irq(GPIO_TCON_INTR);

#if defined(CONFIG_FB_HW_TRIGGER)
	gpio_request(GPIO_PSR_TE, "PSR_TE");
	s3c_gpio_cfgpin(GPIO_PSR_TE, S3C_GPIO_SFN(2));
#endif

	s5p_dsim1_set_platdata(&dsim_platform_data);
	s5p_fimd1_set_platdata(&chagall_lcd1_pdata);
	s5p_mic_set_platdata(&chagall_fb_win0);

	platform_add_devices(chagall_display_devices,
			ARRAY_SIZE(chagall_display_devices));

	mout_mdnie1 = clk_get(NULL, "mout_mdnie1");
	if ((IS_ERR(mout_mdnie1)))
		pr_err("Can't get clock[%s]\n", "mout_mdnie1");

	mout_mpll = clk_get(NULL, "mout_mpll");
	if ((IS_ERR(mout_mpll)))
		pr_err("Can't get clock[%s]\n", "mout_mpll");

	if (mout_mdnie1 && mout_mpll)
		clk_set_parent(mout_mdnie1, mout_mpll);

	if (mout_mdnie1)
		clk_put(mout_mdnie1);
	if (mout_mpll)
		clk_put(mout_mpll);

	exynos5_fimd1_setup_clock(&s5p_device_fimd1.dev,
			"sclk_fimd", "mout_mdnie1", 266 * MHZ);

	keep_lcd_clk(&s5p_device_fimd1.dev, 1);

	res = platform_get_resource(&s5p_device_fimd1, IORESOURCE_MEM, 1);
	if (res) {
		res->start = bootloaderfb_start;
		res->end = res->start + bootloaderfb_size - 1;
		pr_info("bootloader fb located at %8X-%8X\n", res->start, res->end);
	} else {
		pr_err("failed to find bootloader fb resource\n");
	}
}
void __init exynos5_universal5410_display_init(void)
{
	struct resource *res;

#if defined(CONFIG_LCD_MIPI_S6E8FA0)
	unsigned int lcd_id = lcdtype & 0xF;

	if (!gpio_get_value(GPIO_OLED_ID)) {
		dsim_info.dsim_ddi_pd = &ea8062_mipi_lcd_driver;
		pr_err("panel M\n");
	} else {
		if (lcd_id == 1 || lcd_id == 2) {
			dsim_info.dsim_ddi_pd = &s6e8fa0_mipi_lcd_driver;
			pr_err("panel A,B,C\n");
		} else if (lcd_id == 3 || lcd_id == 4) {
			dsim_info.dsim_ddi_pd = &s6e8fa0_6P_mipi_lcd_driver;
			pr_err("panel D,E,F\n");
		} else if (lcd_id == 5 || lcd_id == 6) {
			dsim_info.dsim_ddi_pd = &s6e8fa0_G_mipi_lcd_driver;
			pr_err("panel G\n");
		} else if (lcd_id == 7) {
			dsim_info.dsim_ddi_pd = &s6e8fa0_I_mipi_lcd_driver;
			pr_err("panel I\n");
		} else {
			dsim_info.dsim_ddi_pd = &s6e8fa0_I_mipi_lcd_driver;
			pr_err("panel select fail\n");
		}
	}
#elif defined(CONFIG_LCD_MIPI_S6E3FA0)
	dsim_info.dsim_ddi_pd = &s6e3fa0_mipi_lcd_driver;
#endif

#ifdef CONFIG_FB_MIPI_DSIM
	s5p_dsim1_set_platdata(&dsim_platform_data);
#endif
	s5p_fimd1_set_platdata(&universal5410_lcd1_pdata);

#ifdef CONFIG_FB_S5P_EXTDSP
	s3cfb_extdsp_set_platdata(&default_extdsp_data);
#endif

	platform_add_devices(universal5410_display_devices,
		ARRAY_SIZE(universal5410_display_devices));

#ifdef CONFIG_FB_MIPI_DSIM
#if defined(CONFIG_LCD_MIPI_S6E8FA0) || defined(CONFIG_LCD_MIPI_S6E3FA0)
	exynos5_fimd1_setup_clock(&s5p_device_fimd1.dev,
		"sclk_fimd", "mout_mpll_bpll", 134 * MHZ);
#endif
#endif
#ifdef CONFIG_FB_S5P_MDNIE
	keep_lcd_clk(&s5p_device_fimd1.dev);
	exynos5_fimd1_setup_clock(&s5p_device_fimd1.dev,
		"sclk_mdnie", "mout_mpll_bpll", 134 * MHZ);
	mdnie_device_register();
#endif
#if defined(CONFIG_FB_LCD_FREQ_SWITCH)
	lcdfreq_device_register();
#endif

	res = platform_get_resource(&s5p_device_fimd1, IORESOURCE_MEM, 1);
	if (res) {
		res->start = bootloaderfb_start;
		res->end = res->start + bootloaderfb_size - 1;
		pr_info("bootloader fb located at %8X-%8X\n", res->start, res->end);
	} else {
		pr_err("failed to find bootloader fb resource\n");
	}
}
static int __init restore_lcd_clk_late_init(void)
{
	keep_lcd_clk(&s5p_device_fimd1.dev, 0);
	return 0;
}
void __init exynos5_universal5420_display_init(void)
{
	struct resource *res;
	struct clk *mout_mdnie1;
	struct clk *mout_mpll;

#ifdef CONFIG_FB_MIPI_DSIM
	s5p_dsim1_set_platdata(&dsim_platform_data);
#endif
#ifdef CONFIG_S5P_DP
	s5p_dp_set_platdata(&universal5420_dp_data);
#endif
	s5p_fimd1_set_platdata(&universal5420_lcd1_pdata);
#ifdef CONFIG_BACKLIGHT_PWM
	samsung_bl_set(&universal5420_bl_gpio_info, &smdk5420_bl_data);
#endif
	platform_add_devices(universal5420_display_devices,
			ARRAY_SIZE(universal5420_display_devices));
#ifdef CONFIG_S5P_DP
	exynos5_fimd1_setup_clock(&s5p_device_fimd1.dev,
			"sclk_fimd", "mout_mpll_bpll", 267 * MHZ);
#endif
	mout_mdnie1 = clk_get(NULL, "mout_mdnie1");
	if ((IS_ERR(mout_mdnie1)))
		pr_err("Can't get clock[%s]\n", "mout_mdnie1");

	mout_mpll = clk_get(NULL, "mout_mpll");
	if ((IS_ERR(mout_mpll)))
		pr_err("Can't get clock[%s]\n", "mout_mpll");

	if (mout_mdnie1 && mout_mpll)
		clk_set_parent(mout_mdnie1, mout_mpll);

	if (mout_mdnie1)
		clk_put(mout_mdnie1);
	if (mout_mpll)
		clk_put(mout_mpll);

#ifdef CONFIG_FB_MIPI_DSIM
#if defined(CONFIG_LCD_MIPI_S6E8FA0) || defined(CONFIG_LCD_MIPI_S6E3FA0)
#if defined(CONFIG_FB_I80IF) && !defined(CONFIG_FB_S5P_MDNIE)
	exynos5_fimd1_setup_clock(&s5p_device_fimd1.dev,
			"sclk_fimd", "mout_mdnie1", 266 * MHZ);
#else
	exynos5_fimd1_setup_clock(&s5p_device_fimd1.dev,
			"sclk_fimd", "mout_mdnie1", 133 * MHZ);
#endif
#else
	/* RPLL rate is 300Mhz, 300/5=60Hz */
	exynos5_fimd1_setup_clock(&s5p_device_fimd1.dev,
			"sclk_fimd", "mout_rpll", 67 * MHZ);
#endif
#endif
#ifdef CONFIG_FB_S5P_MDNIE
	keep_lcd_clk(&s5p_device_fimd1.dev);
#if defined(CONFIG_LCD_MIPI_S6E8FA0) || defined(CONFIG_LCD_MIPI_S6E3FA0)
#ifdef CONFIG_FB_I80IF
	exynos5_fimd1_setup_clock(&s5p_device_fimd1.dev,
		"sclk_mdnie", "mout_mdnie1", 266 * MHZ);
#else
	exynos5_fimd1_setup_clock(&s5p_device_fimd1.dev,
		"sclk_mdnie", "mout_mdnie1", 133 * MHZ);
#endif
#endif
	mdnie_device_register();
#endif

	res = platform_get_resource(&s5p_device_fimd1, IORESOURCE_MEM, 1);
	if (res) {
		res->start = bootloaderfb_start;
		res->end = res->start + bootloaderfb_size - 1;
		pr_info("bootloader fb located at %8X-%8X\n", res->start, res->end);
	} else {
		pr_err("failed to find bootloader fb resource\n");
	}
}