FROMLIST: drm: Parse Colorimetry data block from EDID

CEA 861.3 spec adds colorimetry data block for HDMI.
Parsing the block to get the colorimetry data from
panel.

v2: Rebase

v3: No Change

v4: Addressed Shashank's review comments. Updated
colorimetry field to 16 bit as DCI-P3 got added
in CEA 861-G spec, as pointed out by Shashank.

v5: Fixed checkpatch warnings with --strict option.

Change-Id: Ia82d4c04edff53bd4d6c4411dd90391497140e85
Signed-off-by: Uma Shankar <uma.shankar@intel.com>
Reviewed-by: Shashank Sharma <shashank.sharma@intel.com>
Signed-off-by: Algea Cao <algea.cao@rock-chips.com>
(am from https://patchwork.kernel.org/patch/10861325/)
This commit is contained in:
Algea Cao 2019-08-20 09:32:06 +08:00 committed by Tao Huang
parent 821bf1091c
commit 1058897b3c
2 changed files with 28 additions and 0 deletions

View File

@ -2898,6 +2898,7 @@ add_detailed_modes(struct drm_connector *connector, struct edid *edid,
#define VIDEO_BLOCK 0x02
#define VENDOR_BLOCK 0x03
#define SPEAKER_BLOCK 0x04
#define COLORIMETRY_DATA_BLOCK 0x5
#define HDR_STATIC_METADATA_BLOCK 0x6
#define USE_EXTENDED_TAG 0x07
#define EXT_VIDEO_CAPABILITY_BLOCK 0x00
@ -3867,6 +3868,28 @@ static void fixup_detailed_cea_mode_clock(struct drm_display_mode *mode)
mode->clock = clock;
}
static bool cea_db_is_hdmi_colorimetry_data_block(const u8 *db)
{
if (cea_db_tag(db) != USE_EXTENDED_TAG)
return false;
if (db[1] != COLORIMETRY_DATA_BLOCK)
return false;
return true;
}
static void
drm_parse_colorimetry_data_block(struct drm_connector *connector, const u8 *db)
{
struct drm_hdmi_info *info = &connector->display_info.hdmi;
u16 len;
len = cea_db_payload_len(db);
/* As per CEA 861-G spec */
info->colorimetry = ((db[3] & (0x1 << 7)) << 1) | db[2];
}
static bool cea_db_is_hdmi_hdr_metadata_block(const u8 *db)
{
if (cea_db_tag(db) != USE_EXTENDED_TAG)
@ -4561,6 +4584,8 @@ static void drm_parse_cea_ext(struct drm_connector *connector,
drm_parse_y420cmdb_bitmap(connector, db);
if (cea_db_is_hdmi_hdr_metadata_block(db))
drm_parse_hdr_metadata_block(connector, db);
if (cea_db_is_hdmi_colorimetry_data_block(db))
drm_parse_colorimetry_data_block(connector, db);
}
}

View File

@ -158,6 +158,9 @@ struct drm_hdmi_info {
/** @y420_dc_modes: bitmap of deep color support index */
u8 y420_dc_modes;
/* @colorimetry: bitmap of supported colorimetry modes */
u16 colorimetry;
};
/**