summary refs log tree commit diff
path: root/drivers/gpu/drm/drm_modes.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2009-07-20 14:49:17 -0700
committerDave Airlie <airlied@redhat.com>2009-08-09 12:22:53 +1000
commit38d5487db7f289be1d56ac7df704ee49ed3213b9 (patch)
tree579d620868d87464832424b7e634b07836406ca0 /drivers/gpu/drm/drm_modes.c
parent7b2aa037e878c939676675969983284a02958ae3 (diff)
downloadlinux-38d5487db7f289be1d56ac7df704ee49ed3213b9.tar.gz
drm: When adding probed modes, preserve duplicate mode types
The code which takes probed modes and adds them to a connector eliminates
duplicate modes by comparing them using drm_mode_equal. That function
doesn't consider the type bits, which means that any modes which differ only
in the type field will be lost.

One of the bits in the mode->type field is the DRM_MODE_TYPE_PREFERRED bit.
If the mode with that bit is lost, then higher level code will not know
which mode to select, causing a random mode to be used instead.

This patch simply merges the two mode type bits together; that seems
reasonable to me, but perhaps only a subset of the bits should be used? None
of these can be user defined as they all come from looking at just the
hardware.

Signed-off-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/drm_modes.c')
-rw-r--r--drivers/gpu/drm/drm_modes.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
index 54f492a488a9..7914097b09c6 100644
--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
@@ -566,6 +566,8 @@ void drm_mode_connector_list_update(struct drm_connector *connector)
 				found_it = 1;
 				/* if equal delete the probed mode */
 				mode->status = pmode->status;
+				/* Merge type bits together */
+				mode->type |= pmode->type;
 				list_del(&pmode->head);
 				drm_mode_destroy(connector->dev, pmode);
 				break;