[PATCH v3 4/9] common: edid: Search for valid timing in extension block
Neil Armstrong
narmstrong at baylibre.com
Mon May 3 15:00:09 CEST 2021
Hi,
On 22/04/2021 02:14, Andre Przywara wrote:
> From: Jernej Skrabec <jernej.skrabec at siol.net>
>
> One of my monitors have only 4k at 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 at siol.net>
> Acked-by: Andre Przywara <andre.przywara at arm.com>
> Signed-off-by: Andre Przywara <andre.przywara at 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
More information about the U-Boot
mailing list