mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 14:42:37 +02:00
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:
parent
821bf1091c
commit
1058897b3c
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user