Skip to content

Commit

Permalink
common: edid: Search for valid timing in extension block
Browse files Browse the repository at this point in the history
One of my monitors have only 4k@60 timing in base EDID block which is
out of range for devices with HDMI 1.4. It turns out that it has
additional detailed timings in CTA-861 Extension Block and two of them
are appropriate for HDMI 1.4.

Add additional search for valid detailed timing in extension block.

Signed-off-by: Jernej Skrabec <[email protected]>
Acked-by: Andre Przywara <[email protected]>
Signed-off-by: Andre Przywara <[email protected]>
  • Loading branch information
jernejsk authored and vdsao committed Apr 24, 2021
1 parent 3daea86 commit a327fee
Showing 1 changed file with 18 additions and 0 deletions.
18 changes: 18 additions & 0 deletions common/edid.c
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,24 @@ int edid_get_timing_validate(u8 *buf, int buf_size,
/* Look for detailed timing in base EDID */
found = edid_find_valid_timing(edid->monitor_details.descriptor, 4,
timing, mode_valid, mode_valid_priv);

/* Look for detailed timing in CTA-861 Extension Block */
if (!found && edid->extension_flag && buf_size >= EDID_EXT_SIZE) {
struct edid_cea861_info *info =
(struct edid_cea861_info *)(buf + sizeof(*edid));

if (info->extension_tag == EDID_CEA861_EXTENSION_TAG) {
int count = EDID_CEA861_DTD_COUNT(*info);
int offset = info->dtd_offset;
int size = count * sizeof(struct edid_detailed_timing);

if (offset >= 4 && offset + size < EDID_SIZE)
found = edid_find_valid_timing(
(u8 *)info + offset, count, timing,
mode_valid, mode_valid_priv);
}
}

if (!found)
return -EINVAL;

Expand Down

0 comments on commit a327fee

Please sign in to comment.