mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 04:10:18 +09:00
drm/rockchip: dw_hdmi: Set default color base on previous color
Fixed color anomalies caused by plug when playing hdr videos. Signed-off-by: Algea Cao <algea.cao@rock-chips.com> Change-Id: I487ba996add98e5d474149bae3552fe0e8371ff2
This commit is contained in:
@@ -762,6 +762,35 @@ static int hdmi_bus_fmt_color_depth(unsigned int bus_format)
|
||||
}
|
||||
}
|
||||
|
||||
static int hdmi_bus_fmt_to_color_format(unsigned int bus_format)
|
||||
{
|
||||
switch (bus_format) {
|
||||
case MEDIA_BUS_FMT_UYYVYY8_0_5X24:
|
||||
case MEDIA_BUS_FMT_UYYVYY10_0_5X30:
|
||||
case MEDIA_BUS_FMT_UYYVYY12_0_5X36:
|
||||
case MEDIA_BUS_FMT_UYYVYY16_0_5X48:
|
||||
return RK_IF_FORMAT_YCBCR420;
|
||||
|
||||
case MEDIA_BUS_FMT_YUV8_1X24:
|
||||
case MEDIA_BUS_FMT_YUV10_1X30:
|
||||
case MEDIA_BUS_FMT_YUV12_1X36:
|
||||
case MEDIA_BUS_FMT_YUV16_1X48:
|
||||
return RK_IF_FORMAT_YCBCR444;
|
||||
|
||||
case MEDIA_BUS_FMT_UYVY8_1X16:
|
||||
case MEDIA_BUS_FMT_UYVY10_1X20:
|
||||
case MEDIA_BUS_FMT_UYVY12_1X24:
|
||||
return RK_IF_FORMAT_YCBCR422;
|
||||
|
||||
case MEDIA_BUS_FMT_RGB888_1X24:
|
||||
case MEDIA_BUS_FMT_RGB101010_1X30:
|
||||
case MEDIA_BUS_FMT_RGB121212_1X36:
|
||||
case MEDIA_BUS_FMT_RGB161616_1X48:
|
||||
default:
|
||||
return RK_IF_FORMAT_RGB;
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned int
|
||||
hdmi_get_tmdsclock(struct rockchip_hdmi *hdmi, unsigned long pixelclock)
|
||||
{
|
||||
@@ -2005,8 +2034,9 @@ dw_hdmi_rockchip_select_output(struct drm_connector_state *conn_state,
|
||||
*enc_out_encoding = V4L2_YCBCR_ENC_709;
|
||||
}
|
||||
|
||||
if ((yuv422_out || hdmi->hdmi_output == RK_IF_FORMAT_YCBCR_HQ) &&
|
||||
color_depth == 10 && hdmi_bus_fmt_color_depth(hdmi->prev_bus_format) == 8) {
|
||||
if ((yuv422_out || hdmi->hdmi_output == RK_IF_FORMAT_YCBCR_HQ) && color_depth == 10 &&
|
||||
(hdmi_bus_fmt_color_depth(hdmi->prev_bus_format) == 8 ||
|
||||
hdmi_bus_fmt_to_color_format(hdmi->prev_bus_format) == RK_IF_FORMAT_YCBCR422)) {
|
||||
/* We prefer use YCbCr422 to send hdr 10bit */
|
||||
if (info->color_formats & DRM_COLOR_FORMAT_YCRCB422)
|
||||
*color_format = RK_IF_FORMAT_YCBCR422;
|
||||
|
||||
Reference in New Issue
Block a user