[PATCH edid-decode v2] Fix manufacture/model week/year parsing

Jeremy Huddleston jeremyhu at apple.com
Sun Dec 18 16:45:08 PST 2011


<lazy>Can you please link the EDID specification, I just looked on wikipedia which is not quite authoritative</lazy>

The changes look logical to me assuming the fields represent the values I think they do (based on wikipedia).  Still, I'm confused about this > 2006 issue.  Is that somewhere in the spec?  What if firmware updates cause the display to support EDID v1.4 but it was manufactured in 2005?

To check for <1.4, you should change "edid[0x13] < 4" to "(edid[0x12] == 1 && edid[0x13] < 4)" ... your existing check would not work for EDID version 2.0.

If you change the 1.4 check (and that matches the spec), or if you remove the 1.4 check, 

Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>

On Dec 17, 2011, at 15:24, Tormod Volden wrote:

> From: Tormod Volden <debian.tormod at gmail.com>
> 
> For instance, the handling of week=0xff or week=0 was not working,
> as could be seen from the data/sharp-* examples.
> 
> Only EDID version 1.4 requires the year to be 2006 or later.
> 
> Signed-off-by: Tormod Volden <debian.tormod at gmail.com>
> ---
> 
> v2: We should not require year >= 2006 if version < 1.4.
> 
> This can be made prettier if we do the EDID version
> parsing before the week and year parsing, but I will leave it like
> this for now.
> 
> Tormod
> 
> 
> edid-decode.c |   22 +++++++++++-----------
> 1 files changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/edid-decode.c b/edid-decode.c
> index ab4bde8..9c89528 100644
> --- a/edid-decode.c
> +++ b/edid-decode.c
> @@ -953,18 +953,18 @@ int main(int argc, char **argv)
> 
>     time(&the_time);
>     ptm = localtime(&the_time);
> -    if (edid[0x10] < 55 || edid[0x10] == 0xff) {
> +    if (edid[0x10] < 0x37 || edid[0x10] == 0xff)
> 	has_valid_week = 1;
> -	if (edid[0x11] > 0x0f) {
> -	    if (edid[0x10] == 0xff) {
> -		has_valid_year = 1;
> -		printf("Made week %hd of model year %hd\n", edid[0x10],
> -		       edid[0x11]);
> -	    } else if (edid[0x11] + 90 <= ptm->tm_year) {
> -		has_valid_year = 1;
> -		printf("Made week %hd of %hd\n", edid[0x10], edid[0x11] + 1990);
> -	    }
> -	}
> +    if (edid[0x11] + 90 <= ptm->tm_year) {
> +	/* Year must be 2006 or later from EDID version 1.4 */
> +	if (edid[0x11] > 0x0f || edid[0x13] < 4)
> +	    has_valid_year = 1;
> +	if (edid[0x10] == 0xff)
> +	    printf("Model year %hd\n", edid[0x11] + 1990);
> +	else if (edid[0x10] == 0)
> +	    printf("Manufactured year %hd\n", edid[0x11] + 1990);
> +	else
> +	    printf("Manufactured week %hd of %hd\n", edid[0x10], edid[0x11] + 1990);
>     }
> 
>     printf("EDID version: %hd.%hd\n", edid[0x12], edid[0x13]);
> -- 
> 1.7.5.4
> 
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
> 



More information about the xorg-devel mailing list