diff mbox

[U-Boot,2/9] video:mipidsim:fdt: Add DT support for mipi dsim driver

Message ID 1390832143-372-3-git-send-email-p.wilczek@samsung.com
State Changes Requested
Delegated to: Minkyu Kang
Headers show

Commit Message

Piotr Wilczek Jan. 27, 2014, 2:15 p.m. UTC
This patch enables parsing mipi data from device tree.
Non device tree case is still supported.

Signed-off-by: Piotr Wilczek <p.wilczek@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Minkyu Kang <mk7.kang@samsung.com>
---
 arch/arm/include/asm/arch-exynos/mipi_dsim.h |    3 +
 drivers/video/exynos_mipi_dsi.c              |   98 ++++++++++++++++++++++++++
 include/fdtdec.h                             |    1 +
 lib/fdtdec.c                                 |    1 +
 4 files changed, 103 insertions(+)

Comments

Minkyu Kang Feb. 7, 2014, 7:53 a.m. UTC | #1
On 27/01/14 23:15, Piotr Wilczek wrote:
> This patch enables parsing mipi data from device tree.
> Non device tree case is still supported.
> 
> Signed-off-by: Piotr Wilczek <p.wilczek@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> Cc: Minkyu Kang <mk7.kang@samsung.com>
> ---
>  arch/arm/include/asm/arch-exynos/mipi_dsim.h |    3 +
>  drivers/video/exynos_mipi_dsi.c              |   98 ++++++++++++++++++++++++++
>  include/fdtdec.h                             |    1 +
>  lib/fdtdec.c                                 |    1 +
>  4 files changed, 103 insertions(+)
> 
> diff --git a/arch/arm/include/asm/arch-exynos/mipi_dsim.h b/arch/arm/include/asm/arch-exynos/mipi_dsim.h
> index 40aca71..c9e8e06 100644
> --- a/arch/arm/include/asm/arch-exynos/mipi_dsim.h
> +++ b/arch/arm/include/asm/arch-exynos/mipi_dsim.h
> @@ -12,6 +12,7 @@
>  
>  #include <linux/list.h>
>  #include <linux/fb.h>
> +#include <lcd.h>
>  
>  #define PANEL_NAME_SIZE		(32)
>  
> @@ -368,8 +369,10 @@ int exynos_mipi_dsi_register_lcd_device(struct mipi_dsim_lcd_device
>  						*lcd_dev);
>  
>  void exynos_set_dsim_platform_data(struct exynos_platform_mipi_dsim *pd);
> +void exynos_init_dsim_platform_data(vidinfo_t *vid);
>  
>  /* panel driver init based on mipi dsi interface */
>  void s6e8ax0_init(void);
>  
> +extern int mipi_power(void);
>  #endif /* _DSIM_H */
> diff --git a/drivers/video/exynos_mipi_dsi.c b/drivers/video/exynos_mipi_dsi.c
> index 8bb8fea..ab15ad6 100644
> --- a/drivers/video/exynos_mipi_dsi.c
> +++ b/drivers/video/exynos_mipi_dsi.c
> @@ -9,6 +9,8 @@
>  
>  #include <common.h>
>  #include <malloc.h>
> +#include <fdtdec.h>
> +#include <libfdt.h>
>  #include <linux/err.h>
>  #include <asm/arch/dsim.h>
>  #include <asm/arch/mipi_dsim.h>
> @@ -22,7 +24,12 @@
>  #define master_to_driver(a)	(a->dsim_lcd_drv)
>  #define master_to_device(a)	(a->dsim_lcd_dev)
>  
> +DECLARE_GLOBAL_DATA_PTR;
> +
>  static struct exynos_platform_mipi_dsim *dsim_pd;
> +static struct mipi_dsim_config dsim_config_dt;
> +static struct exynos_platform_mipi_dsim dsim_platform_data_dt;
> +static struct mipi_dsim_lcd_device mipi_lcd_device_dt;
>  
>  struct mipi_dsim_ddi {
>  	int				bus_id;
> @@ -238,3 +245,94 @@ void exynos_set_dsim_platform_data(struct exynos_platform_mipi_dsim *pd)
>  
>  	dsim_pd = pd;
>  }
> +
> +#ifdef CONFIG_OF_CONTROL
> +int exynos_dsim_config_parse_dt(const void *blob)
> +{
> +	int node;
> +
> +	node = fdtdec_next_compatible(blob, 0, COMPAT_SAMSUNG_EXYNOS_MIPI_DSI);
> +	if (node <= 0) {
> +		printf("exynos_mipi_dsi: Can't get device node for mipi dsi\n");
> +		return -ENODEV;
> +	}
> +
> +	dsim_config_dt.e_interface = fdtdec_get_int(blob, node,
> +				"samsung,dsim-config-e_interface", 0);
> +
> +	dsim_config_dt.e_virtual_ch = fdtdec_get_int(blob, node,
> +				"samsung,dsim-config-e_virtual_ch", 0);
> +
> +	dsim_config_dt.e_pixel_format = fdtdec_get_int(blob, node,
> +				"samsung,dsim-config-e_pixel_format", 0);
> +
> +	dsim_config_dt.e_burst_mode = fdtdec_get_int(blob, node,
> +				"samsung,dsim-config-e_burst_mode", 0);
> +
> +	dsim_config_dt.e_no_data_lane = fdtdec_get_int(blob, node,
> +				"samsung,dsim-config-e_no_data_lane", 0);
> +
> +	dsim_config_dt.e_byte_clk = fdtdec_get_int(blob, node,
> +				"samsung,dsim-config-e_byte_clk", 0);
> +
> +	dsim_config_dt.hfp = fdtdec_get_int(blob, node,
> +				"samsung,dsim-config-hfp", 0);
> +
> +	dsim_config_dt.p = fdtdec_get_int(blob, node,
> +					  "samsung,dsim-config-p", 0);
> +	dsim_config_dt.m = fdtdec_get_int(blob, node,
> +					  "samsung,dsim-config-m", 0);
> +	dsim_config_dt.s = fdtdec_get_int(blob, node,
> +					  "samsung,dsim-config-s", 0);
> +
> +	dsim_config_dt.pll_stable_time = fdtdec_get_int(blob, node,
> +				"samsung,dsim-config-pll_stable_time", 0);
> +
> +	dsim_config_dt.esc_clk = fdtdec_get_int(blob, node,
> +				"samsung,dsim-config-esc_clk", 0);
> +
> +	dsim_config_dt.stop_holding_cnt = fdtdec_get_int(blob, node,
> +				"samsung,dsim-config-stop_holding_cnt", 0);
> +
> +	dsim_config_dt.bta_timeout = fdtdec_get_int(blob, node,
> +				"samsung,dsim-config-bta_timeout", 0);
> +
> +	dsim_config_dt.rx_timeout = fdtdec_get_int(blob, node,
> +				"samsung,dsim-config-rx_timeout", 0);
> +
> +	mipi_lcd_device_dt.name = fdtdec_get_config_string(blob,
> +				"samsung,dsim-device-name");
> +
> +	mipi_lcd_device_dt.id = fdtdec_get_int(blob, node,
> +				"samsung,dsim-device-id", 0);
> +
> +	mipi_lcd_device_dt.bus_id = fdtdec_get_int(blob, node,
> +				"samsung,dsim-device-bus_id", 0);
> +
> +	mipi_lcd_device_dt.reverse_panel = fdtdec_get_int(blob, node,
> +				"samsung,dsim-device-reverse_panel", 0);
> +
> +	return 0;
> +}
> +
> +void exynos_init_dsim_platform_data(vidinfo_t *vid)
> +{
> +	if (exynos_dsim_config_parse_dt(gd->fdt_blob))
> +		debug("Can't get proper dsim config.\n");
> +
> +	strcpy(dsim_platform_data_dt.lcd_panel_name, mipi_lcd_device_dt.name);
> +	dsim_platform_data_dt.dsim_config = &dsim_config_dt;
> +	dsim_platform_data_dt.mipi_power = mipi_power;
> +	dsim_platform_data_dt.phy_enable = set_mipi_phy_ctrl;
> +	dsim_platform_data_dt.lcd_panel_info = (void *)vid;
> +
> +	mipi_lcd_device_dt.platform_data = (void *)&dsim_platform_data_dt;
> +	exynos_mipi_dsi_register_lcd_device(&mipi_lcd_device_dt);
> +
> +#ifdef CONFIG_S6E8AX0
> +	s6e8ax0_init();

No.
Please don't init specific panel at here. looks weird.

> +#endif
> +
> +	dsim_pd = &dsim_platform_data_dt;
> +}
> +#endif
> diff --git a/include/fdtdec.h b/include/fdtdec.h
> index 433d6a7..f12b4aa 100644
> --- a/include/fdtdec.h
> +++ b/include/fdtdec.h
> @@ -78,6 +78,7 @@ enum fdt_compat_id {
>  	COMPAT_SAMSUNG_EXYNOS5_USB3_PHY,/* Exynos phy controller for usb3.0 */
>  	COMPAT_SAMSUNG_EXYNOS_TMU,	/* Exynos TMU */
>  	COMPAT_SAMSUNG_EXYNOS_FIMD,	/* Exynos Display controller */
> +	COMPAT_SAMSUNG_EXYNOS_MIPI_DSI,	/* Exynos mipi dsi */
>  	COMPAT_SAMSUNG_EXYNOS5_DP,	/* Exynos Display port controller */
>  	COMPAT_SAMSUNG_EXYNOS5_DWMMC,	/* Exynos5 DWMMC controller */
>  	COMPAT_SAMSUNG_EXYNOS_SERIAL,	/* Exynos UART */
> diff --git a/lib/fdtdec.c b/lib/fdtdec.c
> index 207314f..46e67ff 100644
> --- a/lib/fdtdec.c
> +++ b/lib/fdtdec.c
> @@ -51,6 +51,7 @@ static const char * const compat_names[COMPAT_COUNT] = {
>  	COMPAT(SAMSUNG_EXYNOS5_USB3_PHY, "samsung,exynos5250-usb3-phy"),
>  	COMPAT(SAMSUNG_EXYNOS_TMU, "samsung,exynos-tmu"),
>  	COMPAT(SAMSUNG_EXYNOS_FIMD, "samsung,exynos-fimd"),
> +	COMPAT(SAMSUNG_EXYNOS_MIPI_DSI, "samsung,exynos-mipi-dsi"),
>  	COMPAT(SAMSUNG_EXYNOS5_DP, "samsung,exynos5-dp"),
>  	COMPAT(SAMSUNG_EXYNOS5_DWMMC, "samsung,exynos5250-dwmmc"),
>  	COMPAT(SAMSUNG_EXYNOS_SERIAL, "samsung,exynos4210-uart"),
> 

Thanks,
Minkyu Kang.
Piotr Wilczek Feb. 7, 2014, 8:43 a.m. UTC | #2
Dear Minkyu Kang,

> -----Original Message-----
> 
> On 27/01/14 23:15, Piotr Wilczek wrote:
> > This patch enables parsing mipi data from device tree.
> > Non device tree case is still supported.
> >
> > Signed-off-by: Piotr Wilczek <p.wilczek@samsung.com>
> > Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> > Cc: Minkyu Kang <mk7.kang@samsung.com>
> > ---
> >  arch/arm/include/asm/arch-exynos/mipi_dsim.h |    3 +
> >  drivers/video/exynos_mipi_dsi.c              |   98
> ++++++++++++++++++++++++++
> >  include/fdtdec.h                             |    1 +
> >  lib/fdtdec.c                                 |    1 +
> >  4 files changed, 103 insertions(+)
> >
> > diff --git a/arch/arm/include/asm/arch-exynos/mipi_dsim.h
> > b/arch/arm/include/asm/arch-exynos/mipi_dsim.h
> > index 40aca71..c9e8e06 100644
> > --- a/arch/arm/include/asm/arch-exynos/mipi_dsim.h
> > +++ b/arch/arm/include/asm/arch-exynos/mipi_dsim.h
> > @@ -12,6 +12,7 @@
> >
> >  #include <linux/list.h>
> >  #include <linux/fb.h>
> > +#include <lcd.h>
> >
> >  #define PANEL_NAME_SIZE		(32)
> >
> > @@ -368,8 +369,10 @@ int exynos_mipi_dsi_register_lcd_device(struct
> mipi_dsim_lcd_device
> >  						*lcd_dev);
> >
> >  void exynos_set_dsim_platform_data(struct exynos_platform_mipi_dsim
> > *pd);
> > +void exynos_init_dsim_platform_data(vidinfo_t *vid);
> >
> >  /* panel driver init based on mipi dsi interface */  void
> > s6e8ax0_init(void);
> >
> > +extern int mipi_power(void);
> >  #endif /* _DSIM_H */
> > diff --git a/drivers/video/exynos_mipi_dsi.c
> > b/drivers/video/exynos_mipi_dsi.c index 8bb8fea..ab15ad6 100644
> > --- a/drivers/video/exynos_mipi_dsi.c
> > +++ b/drivers/video/exynos_mipi_dsi.c
> > @@ -9,6 +9,8 @@
> >
> >  #include <common.h>
> >  #include <malloc.h>
> > +#include <fdtdec.h>
> > +#include <libfdt.h>
> >  #include <linux/err.h>
> >  #include <asm/arch/dsim.h>
> >  #include <asm/arch/mipi_dsim.h>
> > @@ -22,7 +24,12 @@
> >  #define master_to_driver(a)	(a->dsim_lcd_drv)
> >  #define master_to_device(a)	(a->dsim_lcd_dev)
> >
> > +DECLARE_GLOBAL_DATA_PTR;
> > +
> >  static struct exynos_platform_mipi_dsim *dsim_pd;
> > +static struct mipi_dsim_config dsim_config_dt; static struct
> > +exynos_platform_mipi_dsim dsim_platform_data_dt; static struct
> > +mipi_dsim_lcd_device mipi_lcd_device_dt;
> >
> >  struct mipi_dsim_ddi {
> >  	int				bus_id;
> > @@ -238,3 +245,94 @@ void exynos_set_dsim_platform_data(struct
> > exynos_platform_mipi_dsim *pd)
> >
> >  	dsim_pd = pd;
> >  }
> > +
> > +#ifdef CONFIG_OF_CONTROL
> > +int exynos_dsim_config_parse_dt(const void *blob) {
> > +	int node;
> > +
> > +	node = fdtdec_next_compatible(blob, 0,
> COMPAT_SAMSUNG_EXYNOS_MIPI_DSI);
> > +	if (node <= 0) {
> > +		printf("exynos_mipi_dsi: Can't get device node for mipi
> dsi\n");
> > +		return -ENODEV;
> > +	}
> > +
> > +	dsim_config_dt.e_interface = fdtdec_get_int(blob, node,
> > +				"samsung,dsim-config-e_interface", 0);
> > +
> > +	dsim_config_dt.e_virtual_ch = fdtdec_get_int(blob, node,
> > +				"samsung,dsim-config-e_virtual_ch", 0);
> > +
> > +	dsim_config_dt.e_pixel_format = fdtdec_get_int(blob, node,
> > +				"samsung,dsim-config-e_pixel_format", 0);
> > +
> > +	dsim_config_dt.e_burst_mode = fdtdec_get_int(blob, node,
> > +				"samsung,dsim-config-e_burst_mode", 0);
> > +
> > +	dsim_config_dt.e_no_data_lane = fdtdec_get_int(blob, node,
> > +				"samsung,dsim-config-e_no_data_lane", 0);
> > +
> > +	dsim_config_dt.e_byte_clk = fdtdec_get_int(blob, node,
> > +				"samsung,dsim-config-e_byte_clk", 0);
> > +
> > +	dsim_config_dt.hfp = fdtdec_get_int(blob, node,
> > +				"samsung,dsim-config-hfp", 0);
> > +
> > +	dsim_config_dt.p = fdtdec_get_int(blob, node,
> > +					  "samsung,dsim-config-p", 0);
> > +	dsim_config_dt.m = fdtdec_get_int(blob, node,
> > +					  "samsung,dsim-config-m", 0);
> > +	dsim_config_dt.s = fdtdec_get_int(blob, node,
> > +					  "samsung,dsim-config-s", 0);
> > +
> > +	dsim_config_dt.pll_stable_time = fdtdec_get_int(blob, node,
> > +				"samsung,dsim-config-pll_stable_time", 0);
> > +
> > +	dsim_config_dt.esc_clk = fdtdec_get_int(blob, node,
> > +				"samsung,dsim-config-esc_clk", 0);
> > +
> > +	dsim_config_dt.stop_holding_cnt = fdtdec_get_int(blob, node,
> > +				"samsung,dsim-config-stop_holding_cnt", 0);
> > +
> > +	dsim_config_dt.bta_timeout = fdtdec_get_int(blob, node,
> > +				"samsung,dsim-config-bta_timeout", 0);
> > +
> > +	dsim_config_dt.rx_timeout = fdtdec_get_int(blob, node,
> > +				"samsung,dsim-config-rx_timeout", 0);
> > +
> > +	mipi_lcd_device_dt.name = fdtdec_get_config_string(blob,
> > +				"samsung,dsim-device-name");
> > +
> > +	mipi_lcd_device_dt.id = fdtdec_get_int(blob, node,
> > +				"samsung,dsim-device-id", 0);
> > +
> > +	mipi_lcd_device_dt.bus_id = fdtdec_get_int(blob, node,
> > +				"samsung,dsim-device-bus_id", 0);
> > +
> > +	mipi_lcd_device_dt.reverse_panel = fdtdec_get_int(blob, node,
> > +				"samsung,dsim-device-reverse_panel", 0);
> > +
> > +	return 0;
> > +}
> > +
> > +void exynos_init_dsim_platform_data(vidinfo_t *vid) {
> > +	if (exynos_dsim_config_parse_dt(gd->fdt_blob))
> > +		debug("Can't get proper dsim config.\n");
> > +
> > +	strcpy(dsim_platform_data_dt.lcd_panel_name,
> mipi_lcd_device_dt.name);
> > +	dsim_platform_data_dt.dsim_config = &dsim_config_dt;
> > +	dsim_platform_data_dt.mipi_power = mipi_power;
> > +	dsim_platform_data_dt.phy_enable = set_mipi_phy_ctrl;
> > +	dsim_platform_data_dt.lcd_panel_info = (void *)vid;
> > +
> > +	mipi_lcd_device_dt.platform_data = (void
> *)&dsim_platform_data_dt;
> > +	exynos_mipi_dsi_register_lcd_device(&mipi_lcd_device_dt);
> > +
> > +#ifdef CONFIG_S6E8AX0
> > +	s6e8ax0_init();
> 
> No.
> Please don't init specific panel at here. looks weird.
> 
Ok.

> > +#endif
> > +
> > +	dsim_pd = &dsim_platform_data_dt;
> > +}
> > +#endif
> > diff --git a/include/fdtdec.h b/include/fdtdec.h index
> > 433d6a7..f12b4aa 100644
> > --- a/include/fdtdec.h
> > +++ b/include/fdtdec.h
> > @@ -78,6 +78,7 @@ enum fdt_compat_id {
> >  	COMPAT_SAMSUNG_EXYNOS5_USB3_PHY,/* Exynos phy controller for
> usb3.0 */
> >  	COMPAT_SAMSUNG_EXYNOS_TMU,	/* Exynos TMU */
> >  	COMPAT_SAMSUNG_EXYNOS_FIMD,	/* Exynos Display controller */
> > +	COMPAT_SAMSUNG_EXYNOS_MIPI_DSI,	/* Exynos mipi dsi */
> >  	COMPAT_SAMSUNG_EXYNOS5_DP,	/* Exynos Display port controller */
> >  	COMPAT_SAMSUNG_EXYNOS5_DWMMC,	/* Exynos5 DWMMC controller */
> >  	COMPAT_SAMSUNG_EXYNOS_SERIAL,	/* Exynos UART */
> > diff --git a/lib/fdtdec.c b/lib/fdtdec.c index 207314f..46e67ff
> 100644
> > --- a/lib/fdtdec.c
> > +++ b/lib/fdtdec.c
> > @@ -51,6 +51,7 @@ static const char * const
> compat_names[COMPAT_COUNT] = {
> >  	COMPAT(SAMSUNG_EXYNOS5_USB3_PHY, "samsung,exynos5250-usb3-phy"),
> >  	COMPAT(SAMSUNG_EXYNOS_TMU, "samsung,exynos-tmu"),
> >  	COMPAT(SAMSUNG_EXYNOS_FIMD, "samsung,exynos-fimd"),
> > +	COMPAT(SAMSUNG_EXYNOS_MIPI_DSI, "samsung,exynos-mipi-dsi"),
> >  	COMPAT(SAMSUNG_EXYNOS5_DP, "samsung,exynos5-dp"),
> >  	COMPAT(SAMSUNG_EXYNOS5_DWMMC, "samsung,exynos5250-dwmmc"),
> >  	COMPAT(SAMSUNG_EXYNOS_SERIAL, "samsung,exynos4210-uart"),
> >
> 
> Thanks,
> Minkyu Kang.

Best regards,
Piotr Wilczek
diff mbox

Patch

diff --git a/arch/arm/include/asm/arch-exynos/mipi_dsim.h b/arch/arm/include/asm/arch-exynos/mipi_dsim.h
index 40aca71..c9e8e06 100644
--- a/arch/arm/include/asm/arch-exynos/mipi_dsim.h
+++ b/arch/arm/include/asm/arch-exynos/mipi_dsim.h
@@ -12,6 +12,7 @@ 
 
 #include <linux/list.h>
 #include <linux/fb.h>
+#include <lcd.h>
 
 #define PANEL_NAME_SIZE		(32)
 
@@ -368,8 +369,10 @@  int exynos_mipi_dsi_register_lcd_device(struct mipi_dsim_lcd_device
 						*lcd_dev);
 
 void exynos_set_dsim_platform_data(struct exynos_platform_mipi_dsim *pd);
+void exynos_init_dsim_platform_data(vidinfo_t *vid);
 
 /* panel driver init based on mipi dsi interface */
 void s6e8ax0_init(void);
 
+extern int mipi_power(void);
 #endif /* _DSIM_H */
diff --git a/drivers/video/exynos_mipi_dsi.c b/drivers/video/exynos_mipi_dsi.c
index 8bb8fea..ab15ad6 100644
--- a/drivers/video/exynos_mipi_dsi.c
+++ b/drivers/video/exynos_mipi_dsi.c
@@ -9,6 +9,8 @@ 
 
 #include <common.h>
 #include <malloc.h>
+#include <fdtdec.h>
+#include <libfdt.h>
 #include <linux/err.h>
 #include <asm/arch/dsim.h>
 #include <asm/arch/mipi_dsim.h>
@@ -22,7 +24,12 @@ 
 #define master_to_driver(a)	(a->dsim_lcd_drv)
 #define master_to_device(a)	(a->dsim_lcd_dev)
 
+DECLARE_GLOBAL_DATA_PTR;
+
 static struct exynos_platform_mipi_dsim *dsim_pd;
+static struct mipi_dsim_config dsim_config_dt;
+static struct exynos_platform_mipi_dsim dsim_platform_data_dt;
+static struct mipi_dsim_lcd_device mipi_lcd_device_dt;
 
 struct mipi_dsim_ddi {
 	int				bus_id;
@@ -238,3 +245,94 @@  void exynos_set_dsim_platform_data(struct exynos_platform_mipi_dsim *pd)
 
 	dsim_pd = pd;
 }
+
+#ifdef CONFIG_OF_CONTROL
+int exynos_dsim_config_parse_dt(const void *blob)
+{
+	int node;
+
+	node = fdtdec_next_compatible(blob, 0, COMPAT_SAMSUNG_EXYNOS_MIPI_DSI);
+	if (node <= 0) {
+		printf("exynos_mipi_dsi: Can't get device node for mipi dsi\n");
+		return -ENODEV;
+	}
+
+	dsim_config_dt.e_interface = fdtdec_get_int(blob, node,
+				"samsung,dsim-config-e_interface", 0);
+
+	dsim_config_dt.e_virtual_ch = fdtdec_get_int(blob, node,
+				"samsung,dsim-config-e_virtual_ch", 0);
+
+	dsim_config_dt.e_pixel_format = fdtdec_get_int(blob, node,
+				"samsung,dsim-config-e_pixel_format", 0);
+
+	dsim_config_dt.e_burst_mode = fdtdec_get_int(blob, node,
+				"samsung,dsim-config-e_burst_mode", 0);
+
+	dsim_config_dt.e_no_data_lane = fdtdec_get_int(blob, node,
+				"samsung,dsim-config-e_no_data_lane", 0);
+
+	dsim_config_dt.e_byte_clk = fdtdec_get_int(blob, node,
+				"samsung,dsim-config-e_byte_clk", 0);
+
+	dsim_config_dt.hfp = fdtdec_get_int(blob, node,
+				"samsung,dsim-config-hfp", 0);
+
+	dsim_config_dt.p = fdtdec_get_int(blob, node,
+					  "samsung,dsim-config-p", 0);
+	dsim_config_dt.m = fdtdec_get_int(blob, node,
+					  "samsung,dsim-config-m", 0);
+	dsim_config_dt.s = fdtdec_get_int(blob, node,
+					  "samsung,dsim-config-s", 0);
+
+	dsim_config_dt.pll_stable_time = fdtdec_get_int(blob, node,
+				"samsung,dsim-config-pll_stable_time", 0);
+
+	dsim_config_dt.esc_clk = fdtdec_get_int(blob, node,
+				"samsung,dsim-config-esc_clk", 0);
+
+	dsim_config_dt.stop_holding_cnt = fdtdec_get_int(blob, node,
+				"samsung,dsim-config-stop_holding_cnt", 0);
+
+	dsim_config_dt.bta_timeout = fdtdec_get_int(blob, node,
+				"samsung,dsim-config-bta_timeout", 0);
+
+	dsim_config_dt.rx_timeout = fdtdec_get_int(blob, node,
+				"samsung,dsim-config-rx_timeout", 0);
+
+	mipi_lcd_device_dt.name = fdtdec_get_config_string(blob,
+				"samsung,dsim-device-name");
+
+	mipi_lcd_device_dt.id = fdtdec_get_int(blob, node,
+				"samsung,dsim-device-id", 0);
+
+	mipi_lcd_device_dt.bus_id = fdtdec_get_int(blob, node,
+				"samsung,dsim-device-bus_id", 0);
+
+	mipi_lcd_device_dt.reverse_panel = fdtdec_get_int(blob, node,
+				"samsung,dsim-device-reverse_panel", 0);
+
+	return 0;
+}
+
+void exynos_init_dsim_platform_data(vidinfo_t *vid)
+{
+	if (exynos_dsim_config_parse_dt(gd->fdt_blob))
+		debug("Can't get proper dsim config.\n");
+
+	strcpy(dsim_platform_data_dt.lcd_panel_name, mipi_lcd_device_dt.name);
+	dsim_platform_data_dt.dsim_config = &dsim_config_dt;
+	dsim_platform_data_dt.mipi_power = mipi_power;
+	dsim_platform_data_dt.phy_enable = set_mipi_phy_ctrl;
+	dsim_platform_data_dt.lcd_panel_info = (void *)vid;
+
+	mipi_lcd_device_dt.platform_data = (void *)&dsim_platform_data_dt;
+	exynos_mipi_dsi_register_lcd_device(&mipi_lcd_device_dt);
+
+#ifdef CONFIG_S6E8AX0
+	s6e8ax0_init();
+#endif
+
+	dsim_pd = &dsim_platform_data_dt;
+}
+#endif
diff --git a/include/fdtdec.h b/include/fdtdec.h
index 433d6a7..f12b4aa 100644
--- a/include/fdtdec.h
+++ b/include/fdtdec.h
@@ -78,6 +78,7 @@  enum fdt_compat_id {
 	COMPAT_SAMSUNG_EXYNOS5_USB3_PHY,/* Exynos phy controller for usb3.0 */
 	COMPAT_SAMSUNG_EXYNOS_TMU,	/* Exynos TMU */
 	COMPAT_SAMSUNG_EXYNOS_FIMD,	/* Exynos Display controller */
+	COMPAT_SAMSUNG_EXYNOS_MIPI_DSI,	/* Exynos mipi dsi */
 	COMPAT_SAMSUNG_EXYNOS5_DP,	/* Exynos Display port controller */
 	COMPAT_SAMSUNG_EXYNOS5_DWMMC,	/* Exynos5 DWMMC controller */
 	COMPAT_SAMSUNG_EXYNOS_SERIAL,	/* Exynos UART */
diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index 207314f..46e67ff 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -51,6 +51,7 @@  static const char * const compat_names[COMPAT_COUNT] = {
 	COMPAT(SAMSUNG_EXYNOS5_USB3_PHY, "samsung,exynos5250-usb3-phy"),
 	COMPAT(SAMSUNG_EXYNOS_TMU, "samsung,exynos-tmu"),
 	COMPAT(SAMSUNG_EXYNOS_FIMD, "samsung,exynos-fimd"),
+	COMPAT(SAMSUNG_EXYNOS_MIPI_DSI, "samsung,exynos-mipi-dsi"),
 	COMPAT(SAMSUNG_EXYNOS5_DP, "samsung,exynos5-dp"),
 	COMPAT(SAMSUNG_EXYNOS5_DWMMC, "samsung,exynos5250-dwmmc"),
 	COMPAT(SAMSUNG_EXYNOS_SERIAL, "samsung,exynos4210-uart"),