drm/edid: Reshuffle mode list construction to closer match the spec
authorAdam Jackson <ajax@redhat.com>
Mon, 29 Mar 2010 21:43:21 +0000 (21:43 +0000)
committerDave Airlie <airlied@redhat.com>
Tue, 6 Apr 2010 00:40:18 +0000 (10:40 +1000)
Also, document what the spec says to do.

Signed-off-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/drm_edid.c

index 9c4717ff5f71e1613c13494d0a6cfa6010da5b3a..858fedc33d9b1ffa29f48e3bd8324093a29fac55 100644 (file)
@@ -1377,10 +1377,24 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
 
        quirks = edid_get_quirks(edid);
 
-       num_modes += add_established_modes(connector, edid);
-       num_modes += add_standard_modes(connector, edid);
+       /*
+        * EDID spec says modes should be preferred in this order:
+        * - preferred detailed mode
+        * - other detailed modes from base block
+        * - detailed modes from extension blocks
+        * - CVT 3-byte code modes
+        * - standard timing codes
+        * - established timing codes
+        * - modes inferred from GTF or CVT range information
+        *
+        * We don't quite implement this yet, but we're close.
+        *
+        * XXX order for additional mode types in extension blocks?
+        */
        num_modes += add_detailed_info(connector, edid, quirks);
        num_modes += add_detailed_info_eedid(connector, edid, quirks);
+       num_modes += add_standard_modes(connector, edid);
+       num_modes += add_established_modes(connector, edid);
 
        if (quirks & (EDID_QUIRK_PREFER_LARGE_60 | EDID_QUIRK_PREFER_LARGE_75))
                edid_fixup_preferred(connector, quirks);