if (hdmi_drv->data->soc_type == HDMI_SOC_RK3036) {
vpara->input_color = VIDEO_INPUT_COLOR_RGB;
vpara->output_color = VIDEO_OUTPUT_RGB444;/*rk3036 vop only can output rgb fmt*/
- } else if (hdmi_drv->data->soc_type == HDMI_SOC_RK312X)
- vpara->input_color = VIDEO_INPUT_COLOR_YCBCR444;/*rk3128 vop can output yuv444 fmt*/
+ } else if (hdmi_drv->data->soc_type == HDMI_SOC_RK312X) {
+ /* rk3128 vop can output yuv444 fmt */
+ if (vpara->input_color == VIDEO_INPUT_COLOR_YCBCR444)
+ vpara->output_color = VIDEO_OUTPUT_YCBCR444;
+ else
+ vpara->output_color = VIDEO_OUTPUT_RGB444;
+ }
if (hdmi_drv->pwr_mode == LOWER_PWR)
rk3036_hdmi_set_pwr_mode(hdmi_drv, NORMAL);
*/
int hdmi_init_video_para(struct hdmi *hdmi_drv, struct hdmi_video_para *video)
{
+ struct rk_lcdc_driver *lcdc_drv = NULL;
+
+ if (unlikely(hdmi_drv == NULL))
+ return -1;
+
+ lcdc_drv = hdmi_drv->lcdc;
+ if (unlikely(lcdc_drv == NULL))
+ return -1;
+
memset(video, 0, sizeof(struct hdmi_video_para));
+
video->vic = hdmi_drv->vic;
video->input_mode = VIDEO_INPUT_RGB_YCBCR_444;
- video->input_color = VIDEO_INPUT_COLOR_RGB;
+ if (lcdc_drv->output_domain == OUTPUT_RGB_DOMAIN)
+ video->input_color = VIDEO_INPUT_COLOR_RGB;
+ else
+ video->input_color = VIDEO_INPUT_COLOR_YCBCR444;
+
video->output_mode = hdmi_drv->edid.sink_hdmi;
video->format_3d = 0; /* TODO modify according to EDID if need */
video->pixel_repet = 0;