DBG("%s", __func__);
video.vic = hdmi->vic & HDMI_VIC_MASK;
- if (hdmi->vic & HDMI_VIDEO_YUV420)
- video.color_input = HDMI_COLOR_YCBCR420;
- else if (hdmi->edid.sink_hdmi == 0)
- video.color_input = HDMI_COLOR_RGB_0_255;
- else
- video.color_input = HDMI_COLOR_YCBCR444;
video.sink_hdmi = hdmi->edid.sink_hdmi;
video.format_3d = hdmi->mode_3d;
/* For DVI, output RGB */
if (hdmi->vic & HDMI_VIDEO_YUV420)
video.color_output = HDMI_COLOR_YCBCR420;
pr_info("hdmi output corlor mode is %d\n", video.color_output);
+ video.color_input = HDMI_COLOR_RGB_0_255;
+ if (hdmi->property->feature & SUPPORT_YCBCR_INPUT) {
+ if (video.color_output == HDMI_COLOR_YCBCR444 ||
+ video.color_output == HDMI_COLOR_YCBCR422)
+ video.color_input = HDMI_COLOR_YCBCR444;
+ else if (video.color_output == HDMI_COLOR_YCBCR420)
+ video.color_input = HDMI_COLOR_YCBCR420;
+ }
+ hdmi->colormode_input = video.color_input;
+ hdmi_set_lcdc(hdmi);
if (hdmi->ops->setvideo)
hdmi->ops->setvideo(hdmi, &video);
}
hdmi_send_uevent(hdmi, KOBJ_ADD);
if (hdmi->enable) {
/*hdmi->autoset = 0;*/
- hdmi_set_lcdc(hdmi);
hdmi_wq_set_video(hdmi);
#ifdef CONFIG_SWITCH
if ((hdmi->edid.baseaudio_support &&
msleep(2000);
else
msleep(1000);
- hdmi_set_lcdc(hdmi);
- hdmi_send_uevent(hdmi, KOBJ_CHANGE);
hdmi_wq_set_video(hdmi);
+ hdmi_send_uevent(hdmi, KOBJ_CHANGE);
hdmi_wq_set_audio(hdmi);
hdmi_wq_set_output(hdmi, hdmi->mute);
if (hdmi->ops->hdcp_cb)
/* screen type & face */
screen->type = SCREEN_HDMI;
- if (hdmi->edid.sink_hdmi)
- screen->color_mode = COLOR_YCBCR;
- else
+ if (hdmi->colormode_input == HDMI_COLOR_RGB_0_255)
screen->color_mode = COLOR_RGB;
+ else
+ screen->color_mode = COLOR_YCBCR;
if (hdmi->vic & HDMI_VIDEO_YUV420)
screen->face = OUT_YUV_420;
else
if (vic == hdmi_mode[i].vic ||
vic == hdmi_mode[i].vic_2nd) {
if ((((feature & SUPPORT_TMDS_600M) == 0 &&
- !(modelist->vic & HDMI_VIDEO_YUV420)) ||
+ !(modelist->vic & HDMI_VIDEO_YUV420)) ||
edid->maxtmdsclock < 340000000) &&
hdmi_mode[i].mode.pixclock > 340000000)
continue;
SUPPORT_CEC = (1 << 9),
SUPPORT_HDCP = (1 << 10),
SUPPORT_HDCP2 = (1 << 11),
+ SUPPORT_YCBCR_INPUT = (1 << 12),
};
struct hdmi_property {
2 means mute audio,
1 means mute display;
0 is unmute*/
- int colordepth;
- int colormode;
-
+ int colordepth; /* Ouput color depth*/
+ int colormode; /* Ouput color mode*/
+ int colormode_input; /* Input color mode*/
struct hdmi_edid edid; /* EDID information*/
int enable; /* Enable flag*/
int sleep; /* Sleep flag*/
rk_hdmi_property.feature |=
SUPPORT_4K |
SUPPORT_4K_4096 |
- SUPPORT_YUV420;
+ SUPPORT_YUV420 |
+ SUPPORT_YCBCR_INPUT;
}
hdmi_dev->hdmi =
rockchip_hdmi_register(&rk_hdmi_property, &rk_hdmi_ops);
hdmi_dev->debugfs_dir,
hdmi_dev, &rockchip_hdmiv2_reg_fops);
#endif
- if (rk_fb_get_display_policy() == DISPLAY_POLICY_BOX)
- rk_display_device_enable(hdmi_dev->hdmi->ddev);
+ rk_display_device_enable(hdmi_dev->hdmi->ddev);
#ifndef HDMI_INT_USE_POLL
/* get and request the IRQ */
16-235 output accroding
BT709 that is 10bit clolor
depth */
- CSC_ITU601_16_235_TO_RGB_16_235_8BIT, /* YCbCr 16-235 input to RGB
- 16-235 output according
+ CSC_ITU601_16_235_TO_RGB_0_255_8BIT, /* YCbCr 16-235 input to RGB
+ 0-255 output according
BT601 that is 8bit clolor
depth */
- CSC_ITU709_16_235_TO_RGB_16_235_8BIT, /* YCbCr 16-235 input to RGB
- 16-235 output according
+ CSC_ITU709_16_235_TO_RGB_0_255_8BIT, /* YCbCr 16-235 input to RGB
+ 0-255 output according
BT709 that is 8bit clolor
depth */
- CSC_ITU601_16_235_TO_RGB_0_255_8BIT, /* YCbCr 16-235 input to RGB
- 0-255 output according
+ CSC_ITU601_16_235_TO_RGB_16_235_8BIT, /* YCbCr 16-235 input to RGB
+ 16-235 output according
BT601 that is 8bit clolor
depth */
- CSC_ITU709_16_235_TO_RGB_0_255_8BIT /* YCbCr 16-235 input to RGB
- 0-255 output according
+ CSC_ITU709_16_235_TO_RGB_16_235_8BIT /* YCbCr 16-235 input to RGB
+ 16-235 output according
BT709 that is 8bit clolor
depth */
};