drm/bridge: synopsys: dw-hdmi: Fix hdr mode abnormal color

1.Add support rgb bt2020 color space output.
2.Set AVI YQ to limited range.

Signed-off-by: Algea Cao <algea.cao@rock-chips.com>
Change-Id: I0a7d1ecbf2ab002328c8e6bcb115753e17e4bbb9
This commit is contained in:
Algea Cao
2022-11-19 17:19:02 +08:00
parent 5e211fd067
commit 378d1905a2

View File

@@ -2000,6 +2000,10 @@ static void hdmi_config_AVI(struct dw_hdmi *hdmi,
{
struct hdmi_avi_infoframe frame;
u8 val;
bool is_hdmi2;
const struct drm_display_info *info = &connector->display_info;
is_hdmi2 = info->hdmi.scdc.supported || (info->color_formats & DRM_COLOR_FORMAT_YCRCB420);
/* Initialise info frame from DRM mode */
drm_hdmi_avi_infoframe_from_display_mode(&frame, connector, mode);
@@ -2062,10 +2066,22 @@ static void hdmi_config_AVI(struct dw_hdmi *hdmi,
HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
break;
}
frame.ycc_quantization_range = HDMI_YCC_QUANTIZATION_RANGE_LIMITED;
} else {
frame.colorimetry = HDMI_COLORIMETRY_NONE;
frame.extended_colorimetry =
HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
if (hdmi->hdmi_data.enc_out_encoding == V4L2_YCBCR_ENC_BT2020) {
frame.colorimetry = HDMI_COLORIMETRY_EXTENDED;
frame.extended_colorimetry =
HDMI_EXTENDED_COLORIMETRY_BT2020;
} else {
frame.colorimetry = HDMI_COLORIMETRY_NONE;
frame.extended_colorimetry =
HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
}
if (is_hdmi2 && frame.quantization_range == HDMI_QUANTIZATION_RANGE_FULL)
frame.ycc_quantization_range = HDMI_YCC_QUANTIZATION_RANGE_FULL;
else
frame.ycc_quantization_range = HDMI_YCC_QUANTIZATION_RANGE_LIMITED;
}
/*