Hi, On 22/04/2021 02:14, Andre Przywara wrote: > From: Jernej Skrabec <jernej.skra...@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.skra...@siol.net> > Acked-by: Andre Przywara <andre.przyw...@arm.com> > Signed-off-by: Andre Przywara <andre.przyw...@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