summaryrefslogtreecommitdiff
path: root/src/lib/edid.c
diff options
context:
space:
mode:
authorHung-Te Lin <hungte@chromium.org>2014-04-03 21:13:11 +0800
committerIsaac Christensen <isaac.christensen@se-eng.com>2014-10-01 17:26:09 +0200
commit08f6c80d34db90124e7937ac92e930958fb47ca3 (patch)
tree1005f95f32bd2196c9bd8aa2a1ad058655bac6aa /src/lib/edid.c
parentb2c1062116ec2adce60cbc75908a921b9a35a2b4 (diff)
downloadcoreboot-08f6c80d34db90124e7937ac92e930958fb47ca3.tar.xz
edid: Support EDID 1.4.
EDID v1.4 has changed some fields (0xfc - Monitor Name, 0xfd - Monitor Range Limits) to optional so we need to list the requirements explicitly instead of sharing v1.3 requirements. Change-Id: I5c7ca06893bd20e178bc35164c4ca639c881e00b Signed-off-by: Hung-Te Lin <hungte@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/193013 (cherry picked from commit 2ad598b8bd620117e70e13347365d74a7c6b87ef) Signed-off-by: Isaac Christensen <isaac.christensen@se-eng.com> Reviewed-on: http://review.coreboot.org/6998 Tested-by: build bot (Jenkins) Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
Diffstat (limited to 'src/lib/edid.c')
-rw-r--r--src/lib/edid.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/lib/edid.c b/src/lib/edid.c
index b171c8b99b..6efe6a95ba 100644
--- a/src/lib/edid.c
+++ b/src/lib/edid.c
@@ -1251,7 +1251,24 @@ int decode_edid(unsigned char *edid, int size, struct edid *out)
* }
*/
- if (claims_one_point_three) {
+ if (claims_one_point_four) {
+ if (nonconformant_digital_display ||
+ !has_valid_string_termination ||
+ !has_valid_descriptor_pad ||
+ !has_preferred_timing)
+ conformant = 0;
+ if (!conformant)
+ printk(BIOS_ERR, "EDID block does NOT conform to EDID 1.4!\n");
+ if (nonconformant_digital_display)
+ printk(BIOS_ERR, "\tDigital display field contains garbage: %x\n",
+ nonconformant_digital_display);
+ if (!has_valid_string_termination)
+ printk(BIOS_ERR, "\tDetailed block string not properly terminated\n");
+ if (!has_valid_descriptor_pad)
+ printk(BIOS_ERR, "\tInvalid descriptor block padding\n");
+ if (!has_preferred_timing)
+ printk(BIOS_ERR, "\tMissing preferred timing\n");
+ } else if (claims_one_point_three) {
if (nonconformant_digital_display ||
!has_valid_string_termination ||
!has_valid_descriptor_pad ||