Hi Ajay,

On 03/05/2014 07:16 AM, Ajay kumar wrote:
Piotr,

You need to add the documentation for the bindings you create.
Please add a exynos_mipi_dsi.txt file under the directory:
doc/device-tree-bindings/video/

Yes, I completely overlook that, thanks.

Best regards,
Piotr Wilczek

Regards,
Ajay Kumar


On Tue, Mar 4, 2014 at 7:25 PM, Piotr Wilczek <p.wilc...@samsung.com> wrote:

This patch enables parsing mipi data from device tree.
Non device tree case is still supported.

Signed-off-by: Piotr Wilczek <p.wilc...@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.p...@samsung.com>
Cc: Minkyu Kang <mk7.k...@samsung.com>
---
Changes for v4:
  - use "-" hypen for DT bindings

Changes for v3:
  - none

Changes for v2:
  - removed panel specific init function 's6e8ax0_init' to the board file

  arch/arm/include/asm/arch-exynos/mipi_dsim.h |  5 ++
  drivers/video/exynos_mipi_dsi.c              | 96
++++++++++++++++++++++++++++
  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..50e5c25 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,12 @@ 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);

+#ifdef CONFIG_OF_CONTROL
+extern int mipi_power(void);
+#endif
  #endif /* _DSIM_H */
diff --git a/drivers/video/exynos_mipi_dsi.c
b/drivers/video/exynos_mipi_dsi.c
index 8bb8fea..7dd4652 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,14 @@
  #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;
+#ifdef CONFIG_OF_CONTROL
+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;
+#endif

  struct mipi_dsim_ddi {
         int                             bus_id;
@@ -238,3 +247,90 @@ 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);
+
+       dsim_pd = &dsim_platform_data_dt;
+}
+#endif
diff --git a/include/fdtdec.h b/include/fdtdec.h
index 19bab79..bd84c83 100644
--- a/include/fdtdec.h
+++ b/include/fdtdec.h
@@ -79,6 +79,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 1fecab3..c97fad3 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -52,6 +52,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"),
--
1.8.3.2

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot




_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to