video: exynos_dp: Add function to parse DP DT node
Add function to parse the required platform data fron DP DT node and fill the edp_info structure. Signed-off-by: Ajay Kumar <ajaykumar.rs@samsung.com> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
This commit is contained in:
		
							parent
							
								
									1e4706a715
								
							
						
					
					
						commit
						9947d13e51
					
				|  | @ -27,9 +27,13 @@ | ||||||
| #include <asm/arch/cpu.h> | #include <asm/arch/cpu.h> | ||||||
| #include <asm/arch/dp_info.h> | #include <asm/arch/dp_info.h> | ||||||
| #include <asm/arch/dp.h> | #include <asm/arch/dp.h> | ||||||
|  | #include <fdtdec.h> | ||||||
|  | #include <libfdt.h> | ||||||
| 
 | 
 | ||||||
| #include "exynos_dp_lowlevel.h" | #include "exynos_dp_lowlevel.h" | ||||||
| 
 | 
 | ||||||
|  | DECLARE_GLOBAL_DATA_PTR; | ||||||
|  | 
 | ||||||
| static struct exynos_dp_platform_data *dp_pd; | static struct exynos_dp_platform_data *dp_pd; | ||||||
| 
 | 
 | ||||||
| void __exynos_set_dp_phy(unsigned int onoff) | void __exynos_set_dp_phy(unsigned int onoff) | ||||||
|  | @ -859,6 +863,62 @@ static unsigned int exynos_dp_config_video(struct edp_device_info *edp_info) | ||||||
| 	return ret; | 	return ret; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #ifdef CONFIG_OF_CONTROL | ||||||
|  | int exynos_dp_parse_dt(const void *blob, struct edp_device_info *edp_info) | ||||||
|  | { | ||||||
|  | 	unsigned int node = fdtdec_next_compatible(blob, 0, | ||||||
|  | 						COMPAT_SAMSUNG_EXYNOS5_DP); | ||||||
|  | 	if (node <= 0) { | ||||||
|  | 		debug("exynos_dp: Can't get device node for dp\n"); | ||||||
|  | 		return -ENODEV; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	edp_info->disp_info.h_res = fdtdec_get_int(blob, node, | ||||||
|  | 							"samsung,h-res", 0); | ||||||
|  | 	edp_info->disp_info.h_sync_width = fdtdec_get_int(blob, node, | ||||||
|  | 						"samsung,h-sync-width", 0); | ||||||
|  | 	edp_info->disp_info.h_back_porch = fdtdec_get_int(blob, node, | ||||||
|  | 						"samsung,h-back-porch", 0); | ||||||
|  | 	edp_info->disp_info.h_front_porch = fdtdec_get_int(blob, node, | ||||||
|  | 						"samsung,h-front-porch", 0); | ||||||
|  | 	edp_info->disp_info.v_res = fdtdec_get_int(blob, node, | ||||||
|  | 						"samsung,v-res", 0); | ||||||
|  | 	edp_info->disp_info.v_sync_width = fdtdec_get_int(blob, node, | ||||||
|  | 						"samsung,v-sync-width", 0); | ||||||
|  | 	edp_info->disp_info.v_back_porch = fdtdec_get_int(blob, node, | ||||||
|  | 						"samsung,v-back-porch", 0); | ||||||
|  | 	edp_info->disp_info.v_front_porch = fdtdec_get_int(blob, node, | ||||||
|  | 						"samsung,v-front-porch", 0); | ||||||
|  | 	edp_info->disp_info.v_sync_rate = fdtdec_get_int(blob, node, | ||||||
|  | 						"samsung,v-sync-rate", 0); | ||||||
|  | 
 | ||||||
|  | 	edp_info->lt_info.lt_status = fdtdec_get_int(blob, node, | ||||||
|  | 						"samsung,lt-status", 0); | ||||||
|  | 
 | ||||||
|  | 	edp_info->video_info.master_mode = fdtdec_get_int(blob, node, | ||||||
|  | 						"samsung,master-mode", 0); | ||||||
|  | 	edp_info->video_info.bist_mode = fdtdec_get_int(blob, node, | ||||||
|  | 						"samsung,bist-mode", 0); | ||||||
|  | 	edp_info->video_info.bist_pattern = fdtdec_get_int(blob, node, | ||||||
|  | 						"samsung,bist-pattern", 0); | ||||||
|  | 	edp_info->video_info.h_sync_polarity = fdtdec_get_int(blob, node, | ||||||
|  | 						"samsung,h-sync-polarity", 0); | ||||||
|  | 	edp_info->video_info.v_sync_polarity = fdtdec_get_int(blob, node, | ||||||
|  | 						"samsung,v-sync-polarity", 0); | ||||||
|  | 	edp_info->video_info.interlaced = fdtdec_get_int(blob, node, | ||||||
|  | 						"samsung,interlaced", 0); | ||||||
|  | 	edp_info->video_info.color_space = fdtdec_get_int(blob, node, | ||||||
|  | 						"samsung,color-space", 0); | ||||||
|  | 	edp_info->video_info.dynamic_range = fdtdec_get_int(blob, node, | ||||||
|  | 						"samsung,dynamic-range", 0); | ||||||
|  | 	edp_info->video_info.ycbcr_coeff = fdtdec_get_int(blob, node, | ||||||
|  | 						"samsung,ycbcr-coeff", 0); | ||||||
|  | 	edp_info->video_info.color_depth = fdtdec_get_int(blob, node, | ||||||
|  | 						"samsung,color-depth", 0); | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| unsigned int exynos_init_dp(void) | unsigned int exynos_init_dp(void) | ||||||
| { | { | ||||||
| 	unsigned int ret; | 	unsigned int ret; | ||||||
|  | @ -870,11 +930,16 @@ unsigned int exynos_init_dp(void) | ||||||
| 		return -EFAULT; | 		return -EFAULT; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | #ifdef CONFIG_OF_CONTROL | ||||||
|  | 	if (exynos_dp_parse_dt(gd->fdt_blob, edp_info)) | ||||||
|  | 		debug("unable to parse DP DT node\n"); | ||||||
|  | #else | ||||||
| 	edp_info = dp_pd->edp_dev_info; | 	edp_info = dp_pd->edp_dev_info; | ||||||
| 	if (edp_info == NULL) { | 	if (edp_info == NULL) { | ||||||
| 		debug("failed to get edp_info data.\n"); | 		debug("failed to get edp_info data.\n"); | ||||||
| 		return -EFAULT; | 		return -EFAULT; | ||||||
| 	} | 	} | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| 	exynos_dp_set_base_addr(); | 	exynos_dp_set_base_addr(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -25,12 +25,29 @@ | ||||||
| #include <asm/arch/cpu.h> | #include <asm/arch/cpu.h> | ||||||
| #include <asm/arch/dp_info.h> | #include <asm/arch/dp_info.h> | ||||||
| #include <asm/arch/dp.h> | #include <asm/arch/dp.h> | ||||||
|  | #include <fdtdec.h> | ||||||
|  | #include <libfdt.h> | ||||||
|  | 
 | ||||||
|  | /* Declare global data pointer */ | ||||||
|  | DECLARE_GLOBAL_DATA_PTR; | ||||||
| 
 | 
 | ||||||
| struct exynos_dp *dp_regs; | struct exynos_dp *dp_regs; | ||||||
| 
 | 
 | ||||||
| void exynos_dp_set_base_addr(void) | void exynos_dp_set_base_addr(void) | ||||||
| { | { | ||||||
|  | #ifdef CONFIG_OF_CONTROL | ||||||
|  | 	unsigned int node = fdtdec_next_compatible(gd->fdt_blob, | ||||||
|  | 					0, COMPAT_SAMSUNG_EXYNOS5_DP); | ||||||
|  | 	if (node <= 0) | ||||||
|  | 		debug("exynos_dp: Can't get device node for dp\n"); | ||||||
|  | 
 | ||||||
|  | 	dp_regs = (struct exynos_dp *)fdtdec_get_addr(gd->fdt_blob, | ||||||
|  | 								node, "reg"); | ||||||
|  | 	if (dp_regs == NULL) | ||||||
|  | 		debug("Can't get the DP base address\n"); | ||||||
|  | #else | ||||||
| 	dp_regs = (struct exynos_dp *)samsung_get_base_dp(); | 	dp_regs = (struct exynos_dp *)samsung_get_base_dp(); | ||||||
|  | #endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void exynos_dp_enable_video_input(unsigned int enable) | static void exynos_dp_enable_video_input(unsigned int enable) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue