From mboxrd@z Thu Jan 1 00:00:00 1970 From: Piotr Wilczek Date: Fri, 28 Feb 2014 08:48:26 +0100 Subject: [U-Boot] [PATCH V3 02/12] video:mipidsim:fdt: Add DT support for mipi dsim driver In-Reply-To: References: <1390832143-372-1-git-send-email-p.wilczek@samsung.com> <1393338807-6146-1-git-send-email-p.wilczek@samsung.com> <1393338807-6146-3-git-send-email-p.wilczek@samsung.com> Message-ID: <53103F4A.60103@samsung.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Ajay, On 02/27/2014 03:59 PM, Ajay kumar wrote: > Piotr, > > DT bindings should usually be free of "_" (underscore) > Please use hyphen: "-" I will use hypen. > On Tue, Feb 25, 2014 at 11:33 PM, Piotr Wilczek wrote: > >> This patch enables parsing mipi data from device tree. >> Non device tree case is still supported. >> >> Signed-off-by: Piotr Wilczek >> Signed-off-by: Kyungmin Park >> Cc: Minkyu Kang >> --- >> 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 >> #include >> +#include >> >> #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..6c10f11 100644 >> --- a/drivers/video/exynos_mipi_dsi.c >> +++ b/drivers/video/exynos_mipi_dsi.c >> @@ -9,6 +9,8 @@ >> >> #include >> #include >> +#include >> +#include >> #include >> #include >> #include >> @@ -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 at lists.denx.de >> http://lists.denx.de/mailman/listinfo/u-boot >> > > Regards, > Ajay Kumar > > > > _______________________________________________ > U-Boot mailing list > U-Boot at lists.denx.de > http://lists.denx.de/mailman/listinfo/u-boot > Best regards, Piotr Wilczek