diff options
author | Keith Packard <keithp@keithp.com> | 2009-07-20 14:49:17 -0700 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2009-08-09 12:22:53 +1000 |
commit | 38d5487db7f289be1d56ac7df704ee49ed3213b9 (patch) | |
tree | 579d620868d87464832424b7e634b07836406ca0 /drivers/gpu/drm | |
parent | 7b2aa037e878c939676675969983284a02958ae3 (diff) | |
download | lwn-38d5487db7f289be1d56ac7df704ee49ed3213b9.tar.gz lwn-38d5487db7f289be1d56ac7df704ee49ed3213b9.zip |
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')
-rw-r--r-- | drivers/gpu/drm/drm_modes.c | 2 |
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; |