Commit 4ed29f39 authored by Jani Nikula's avatar Jani Nikula

drm/edid: use VIC in AVI infoframe if sink lists it in CTA VDB

Apparently there are HDMI 1.4 compatible displays out there that support
VICs from specs later than CTA-861-D, i.e. VIC > 64, although HDMI 1.4
references CTA-861-D only.

We try to avoid using VICs from the later specs in the AVI infoframes to
avoid upsetting sinks that conform to earlier specs.

However, it seems reasonable to do this when the sink claims it supports
the VIC. With the pre-parsed list of VICs handy, this is now trivial.

References: https://gitlab.freedesktop.org/drm/intel/-/issues/6153
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: William Tseng <william.tseng@intel.com>
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/775124fd07a5b7892e869becc3dd8dadb328ae5f.1672826282.git.jani.nikula@intel.com
parent 6a40a75f
...@@ -5864,6 +5864,22 @@ static void parse_cta_vdb(struct drm_connector *connector, const struct cea_db * ...@@ -5864,6 +5864,22 @@ static void parse_cta_vdb(struct drm_connector *connector, const struct cea_db *
} }
} }
static bool cta_vdb_has_vic(const struct drm_connector *connector, u8 vic)
{
const struct drm_display_info *info = &connector->display_info;
int i;
if (!vic || !info->vics)
return false;
for (i = 0; i < info->vics_len; i++) {
if (info->vics[i] == vic)
return true;
}
return false;
}
static void drm_parse_vcdb(struct drm_connector *connector, const u8 *db) static void drm_parse_vcdb(struct drm_connector *connector, const u8 *db)
{ {
struct drm_display_info *info = &connector->display_info; struct drm_display_info *info = &connector->display_info;
...@@ -6909,10 +6925,14 @@ static u8 drm_mode_cea_vic(const struct drm_connector *connector, ...@@ -6909,10 +6925,14 @@ static u8 drm_mode_cea_vic(const struct drm_connector *connector,
* *
* HDMI 1.4 (CTA-861-D) VIC range: [1..64] * HDMI 1.4 (CTA-861-D) VIC range: [1..64]
* HDMI 2.0 (CTA-861-F) VIC range: [1..107] * HDMI 2.0 (CTA-861-F) VIC range: [1..107]
*
* If the sink lists the VIC in CTA VDB, assume it's fine, regardless of HDMI
* version.
*/ */
static u8 vic_for_avi_infoframe(const struct drm_connector *connector, u8 vic) static u8 vic_for_avi_infoframe(const struct drm_connector *connector, u8 vic)
{ {
if (!is_hdmi2_sink(connector) && vic > 64) if (!is_hdmi2_sink(connector) && vic > 64 &&
!cta_vdb_has_vic(connector, vic))
return 0; return 0;
return vic; return vic;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment