Loading drivers/gpu/drm/drm_edid.c +52 −0 Original line number Diff line number Diff line Loading @@ -2763,6 +2763,7 @@ add_detailed_modes(struct drm_connector *connector, struct edid *edid, #define VENDOR_BLOCK 0x03 #define SPEAKER_BLOCK 0x04 #define HDR_STATIC_METADATA_EXTENDED_DATA_BLOCK 0x06 #define COLORIMETRY_EXTENDED_DATA_BLOCK 0x05 #define EXTENDED_TAG 0x07 #define VIDEO_CAPABILITY_BLOCK 0x07 #define Y420_VIDEO_DATA_BLOCK 0x0E Loading Loading @@ -3602,11 +3603,15 @@ drm_extract_vcdb_info(struct drm_connector *connector, const u8 *db) (db[2] & (BIT(3) | BIT(2))) >> 2; connector->ce_scan_info = db[2] & (BIT(1) | BIT(0)); connector->rgb_qs = db[2] & BIT(6); connector->yuv_qs = db[2] & BIT(7); DRM_DEBUG_KMS("Scan Info (pt|it|ce): (%d|%d|%d)", (int) connector->pt_scan_info, (int) connector->it_scan_info, (int) connector->ce_scan_info); DRM_DEBUG_KMS("rgb_quant_range_select %d", connector->rgb_qs); DRM_DEBUG_KMS("ycc_quant_range_select %d", connector->yuv_qs); } static bool drm_edid_is_luminance_value_present( Loading Loading @@ -3662,6 +3667,49 @@ drm_extract_hdr_db(struct drm_connector *connector, const u8 *db) DRM_DEBUG_KMS("min luminance %d\n", connector->hdr_min_luminance); } /** * drm_extract_colorimetry_db - Parse the HDMI colorimetry extended block * @connector: connector corresponding to the HDMI sink * @db: start of the HDMI colorimetry extended block * * Parses the HDMI colorimetry block to extract sink info for @connector. */ static void drm_extract_colorimetry_db(struct drm_connector *connector, const u8 *db) { if (!db) { DRM_ERROR("invalid db\n"); return; } if (db[2] & BIT(0)) connector->color_enc_fmt |= DRM_EDID_COLORIMETRY_xvYCC_601; if (db[2] & BIT(1)) connector->color_enc_fmt |= DRM_EDID_COLORIMETRY_xvYCC_709; if (db[2] & BIT(2)) connector->color_enc_fmt |= DRM_EDID_COLORIMETRY_sYCC_601; if (db[2] & BIT(3)) connector->color_enc_fmt |= DRM_EDID_COLORIMETRY_ADBYCC_601; if (db[2] & BIT(4)) connector->color_enc_fmt |= DRM_EDID_COLORIMETRY_ADB_RGB; if (db[2] & BIT(5)) connector->color_enc_fmt |= DRM_EDID_COLORIMETRY_BT2020_CYCC; if (db[2] & BIT(6)) connector->color_enc_fmt |= DRM_EDID_COLORIMETRY_BT2020_YCC; if (db[2] & BIT(7)) connector->color_enc_fmt |= DRM_EDID_COLORIMETRY_BT2020_RGB; DRM_DEBUG_KMS("colorimetry fmt 0x%x\n", connector->color_enc_fmt); } /* * drm_hdmi_extract_extended_blk_info - Parse the HDMI extended tag blocks * @connector: connector corresponding to the HDMI sink Loading Loading @@ -3694,6 +3742,10 @@ struct edid *edid) case HDR_STATIC_METADATA_EXTENDED_DATA_BLOCK: drm_extract_hdr_db(connector, db); break; case COLORIMETRY_EXTENDED_DATA_BLOCK: drm_extract_colorimetry_db(connector, db); break; default: break; } Loading include/drm/drm_connector.h +6 −0 Original line number Diff line number Diff line Loading @@ -542,12 +542,15 @@ struct drm_cmdline_mode { * @pt_scan_info: PT scan info obtained from the VCDB of EDID * @it_scan_info: IT scan info obtained from the VCDB of EDID * @ce_scan_info: CE scan info obtained from the VCDB of EDID * @color_enc_fmt: Colorimetry encoding formats of sink * @hdr_eotf: Electro optical transfer function obtained from HDR block * @hdr_metadata_type_one: Metadata type one obtained from HDR block * @hdr_max_luminance: desired max luminance obtained from HDR block * @hdr_avg_luminance: desired avg luminance obtained from HDR block * @hdr_min_luminance: desired min luminance obtained from HDR block * @hdr_supported: does the sink support HDR content * @rgb_qs: does the sink declare RGB selectable quantization range * @yuv_qs: does the sink declare YCC selectable quantization range * @edid_corrupt: indicates whether the last read EDID was corrupt * @debugfs_entry: debugfs directory for this connector * @state: current atomic state for this connector Loading Loading @@ -703,12 +706,15 @@ struct drm_connector { u8 pt_scan_info; u8 it_scan_info; u8 ce_scan_info; u8 color_enc_fmt; u32 hdr_eotf; bool hdr_metadata_type_one; u32 hdr_max_luminance; u32 hdr_avg_luminance; u32 hdr_min_luminance; bool hdr_supported; bool rgb_qs; bool yuv_qs; /* Flag for raw EDID header corruption - used in Displayport * compliance testing - * Displayport Link CTS Core 1.2 rev1.1 4.2.2.6 Loading include/drm/drm_edid.h +9 −0 Original line number Diff line number Diff line Loading @@ -217,6 +217,15 @@ struct detailed_timing { #define DRM_EDID_YCBCR420_DC_36 (1 << 1) #define DRM_EDID_YCBCR420_DC_30 (1 << 0) #define DRM_EDID_COLORIMETRY_xvYCC_601 (1 << 0) #define DRM_EDID_COLORIMETRY_xvYCC_709 (1 << 1) #define DRM_EDID_COLORIMETRY_sYCC_601 (1 << 2) #define DRM_EDID_COLORIMETRY_ADBYCC_601 (1 << 3) #define DRM_EDID_COLORIMETRY_ADB_RGB (1 << 4) #define DRM_EDID_COLORIMETRY_BT2020_CYCC (1 << 5) #define DRM_EDID_COLORIMETRY_BT2020_YCC (1 << 6) #define DRM_EDID_COLORIMETRY_BT2020_RGB (1 << 7) /* ELD Header Block */ #define DRM_ELD_HEADER_BLOCK_SIZE 4 Loading Loading
drivers/gpu/drm/drm_edid.c +52 −0 Original line number Diff line number Diff line Loading @@ -2763,6 +2763,7 @@ add_detailed_modes(struct drm_connector *connector, struct edid *edid, #define VENDOR_BLOCK 0x03 #define SPEAKER_BLOCK 0x04 #define HDR_STATIC_METADATA_EXTENDED_DATA_BLOCK 0x06 #define COLORIMETRY_EXTENDED_DATA_BLOCK 0x05 #define EXTENDED_TAG 0x07 #define VIDEO_CAPABILITY_BLOCK 0x07 #define Y420_VIDEO_DATA_BLOCK 0x0E Loading Loading @@ -3602,11 +3603,15 @@ drm_extract_vcdb_info(struct drm_connector *connector, const u8 *db) (db[2] & (BIT(3) | BIT(2))) >> 2; connector->ce_scan_info = db[2] & (BIT(1) | BIT(0)); connector->rgb_qs = db[2] & BIT(6); connector->yuv_qs = db[2] & BIT(7); DRM_DEBUG_KMS("Scan Info (pt|it|ce): (%d|%d|%d)", (int) connector->pt_scan_info, (int) connector->it_scan_info, (int) connector->ce_scan_info); DRM_DEBUG_KMS("rgb_quant_range_select %d", connector->rgb_qs); DRM_DEBUG_KMS("ycc_quant_range_select %d", connector->yuv_qs); } static bool drm_edid_is_luminance_value_present( Loading Loading @@ -3662,6 +3667,49 @@ drm_extract_hdr_db(struct drm_connector *connector, const u8 *db) DRM_DEBUG_KMS("min luminance %d\n", connector->hdr_min_luminance); } /** * drm_extract_colorimetry_db - Parse the HDMI colorimetry extended block * @connector: connector corresponding to the HDMI sink * @db: start of the HDMI colorimetry extended block * * Parses the HDMI colorimetry block to extract sink info for @connector. */ static void drm_extract_colorimetry_db(struct drm_connector *connector, const u8 *db) { if (!db) { DRM_ERROR("invalid db\n"); return; } if (db[2] & BIT(0)) connector->color_enc_fmt |= DRM_EDID_COLORIMETRY_xvYCC_601; if (db[2] & BIT(1)) connector->color_enc_fmt |= DRM_EDID_COLORIMETRY_xvYCC_709; if (db[2] & BIT(2)) connector->color_enc_fmt |= DRM_EDID_COLORIMETRY_sYCC_601; if (db[2] & BIT(3)) connector->color_enc_fmt |= DRM_EDID_COLORIMETRY_ADBYCC_601; if (db[2] & BIT(4)) connector->color_enc_fmt |= DRM_EDID_COLORIMETRY_ADB_RGB; if (db[2] & BIT(5)) connector->color_enc_fmt |= DRM_EDID_COLORIMETRY_BT2020_CYCC; if (db[2] & BIT(6)) connector->color_enc_fmt |= DRM_EDID_COLORIMETRY_BT2020_YCC; if (db[2] & BIT(7)) connector->color_enc_fmt |= DRM_EDID_COLORIMETRY_BT2020_RGB; DRM_DEBUG_KMS("colorimetry fmt 0x%x\n", connector->color_enc_fmt); } /* * drm_hdmi_extract_extended_blk_info - Parse the HDMI extended tag blocks * @connector: connector corresponding to the HDMI sink Loading Loading @@ -3694,6 +3742,10 @@ struct edid *edid) case HDR_STATIC_METADATA_EXTENDED_DATA_BLOCK: drm_extract_hdr_db(connector, db); break; case COLORIMETRY_EXTENDED_DATA_BLOCK: drm_extract_colorimetry_db(connector, db); break; default: break; } Loading
include/drm/drm_connector.h +6 −0 Original line number Diff line number Diff line Loading @@ -542,12 +542,15 @@ struct drm_cmdline_mode { * @pt_scan_info: PT scan info obtained from the VCDB of EDID * @it_scan_info: IT scan info obtained from the VCDB of EDID * @ce_scan_info: CE scan info obtained from the VCDB of EDID * @color_enc_fmt: Colorimetry encoding formats of sink * @hdr_eotf: Electro optical transfer function obtained from HDR block * @hdr_metadata_type_one: Metadata type one obtained from HDR block * @hdr_max_luminance: desired max luminance obtained from HDR block * @hdr_avg_luminance: desired avg luminance obtained from HDR block * @hdr_min_luminance: desired min luminance obtained from HDR block * @hdr_supported: does the sink support HDR content * @rgb_qs: does the sink declare RGB selectable quantization range * @yuv_qs: does the sink declare YCC selectable quantization range * @edid_corrupt: indicates whether the last read EDID was corrupt * @debugfs_entry: debugfs directory for this connector * @state: current atomic state for this connector Loading Loading @@ -703,12 +706,15 @@ struct drm_connector { u8 pt_scan_info; u8 it_scan_info; u8 ce_scan_info; u8 color_enc_fmt; u32 hdr_eotf; bool hdr_metadata_type_one; u32 hdr_max_luminance; u32 hdr_avg_luminance; u32 hdr_min_luminance; bool hdr_supported; bool rgb_qs; bool yuv_qs; /* Flag for raw EDID header corruption - used in Displayport * compliance testing - * Displayport Link CTS Core 1.2 rev1.1 4.2.2.6 Loading
include/drm/drm_edid.h +9 −0 Original line number Diff line number Diff line Loading @@ -217,6 +217,15 @@ struct detailed_timing { #define DRM_EDID_YCBCR420_DC_36 (1 << 1) #define DRM_EDID_YCBCR420_DC_30 (1 << 0) #define DRM_EDID_COLORIMETRY_xvYCC_601 (1 << 0) #define DRM_EDID_COLORIMETRY_xvYCC_709 (1 << 1) #define DRM_EDID_COLORIMETRY_sYCC_601 (1 << 2) #define DRM_EDID_COLORIMETRY_ADBYCC_601 (1 << 3) #define DRM_EDID_COLORIMETRY_ADB_RGB (1 << 4) #define DRM_EDID_COLORIMETRY_BT2020_CYCC (1 << 5) #define DRM_EDID_COLORIMETRY_BT2020_YCC (1 << 6) #define DRM_EDID_COLORIMETRY_BT2020_RGB (1 << 7) /* ELD Header Block */ #define DRM_ELD_HEADER_BLOCK_SIZE 4 Loading