|
@@ -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
|