
Hi,
On 22/04/2021 02:14, Andre Przywara wrote:
From: Jernej Skrabec jernej.skrabec@siol.net
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 jernej.skrabec@siol.net Acked-by: Andre Przywara andre.przywara@arm.com Signed-off-by: Andre Przywara andre.przywara@arm.com
common/edid.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
diff --git a/common/edid.c b/common/edid.c index a6c875d9c8e..14d8836c360 100644 --- a/common/edid.c +++ b/common/edid.c @@ -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;
Thanks for doing that, we had the same issue on Amlogic SoCs !
Neil