aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/drm_edid.c
diff options
context:
space:
mode:
authorAdam Jackson <ajax@redhat.com>2010-03-29 21:43:21 +0000
committerDave Airlie <airlied@redhat.com>2010-04-06 10:40:18 +1000
commitc867df7043b738da4f4d358d7039c243a29b4272 (patch)
tree13a4219137fd02603f814749e77234c825233dc9 /drivers/gpu/drm/drm_edid.c
parent2b470ab075b30aaeeab29d67b8f1f111096a5fbe (diff)
downloadkernel_samsung_smdk4412-c867df7043b738da4f4d358d7039c243a29b4272.zip
kernel_samsung_smdk4412-c867df7043b738da4f4d358d7039c243a29b4272.tar.gz
kernel_samsung_smdk4412-c867df7043b738da4f4d358d7039c243a29b4272.tar.bz2
drm/edid: Reshuffle mode list construction to closer match the spec
Also, document what the spec says to do. Signed-off-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/drm_edid.c')
-rw-r--r--drivers/gpu/drm/drm_edid.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 9c4717f..858fedc 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -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);