common: edid: Search for valid timing in extension block
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>
This commit is contained in:
parent
3daea8632c
commit
a327feeef4
@ -220,6 +220,24 @@ int edid_get_timing_validate(u8 *buf, int buf_size,
|
|||||||
/* Look for detailed timing in base EDID */
|
/* Look for detailed timing in base EDID */
|
||||||
found = edid_find_valid_timing(edid->monitor_details.descriptor, 4,
|
found = edid_find_valid_timing(edid->monitor_details.descriptor, 4,
|
||||||
timing, mode_valid, mode_valid_priv);
|
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)
|
if (!found)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user