drm/radeon/kms: properly handle mode id with native mode changes
authorAlex Deucher <alexdeucher@gmail.com>
Mon, 12 Oct 2009 15:25:05 +0000 (11:25 -0400)
committerDave Airlie <airlied@redhat.com>
Mon, 12 Oct 2009 22:45:52 +0000 (08:45 +1000)
drm modes are objects with indentifiers.  Make sure to preserve
the mode id when copying mode params.

Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/radeon/radeon_connectors.c
drivers/gpu/drm/radeon/radeon_encoders.c

index 17d5659..729207a 100644 (file)
@@ -183,8 +183,7 @@ static struct drm_display_mode *radeon_fp_native_mode(struct drm_encoder *encode
        if (native_mode->hdisplay != 0 &&
            native_mode->vdisplay != 0 &&
            native_mode->clock != 0) {
-               mode = drm_mode_create(dev);
-               *mode = *native_mode;
+               mode = drm_mode_duplicate(dev, native_mode);
                mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER;
                drm_mode_set_name(mode);
 
index a9d4e0a..10845f3 100644 (file)
@@ -175,11 +175,13 @@ void radeon_rmx_mode_fixup(struct drm_encoder *encoder,
 
        if (mode->hdisplay < native_mode->hdisplay ||
            mode->vdisplay < native_mode->vdisplay) {
+               int mode_id = adjusted_mode->base.id;
                *adjusted_mode = *native_mode;
                if (!ASIC_IS_AVIVO(rdev)) {
                        adjusted_mode->hdisplay = mode->hdisplay;
                        adjusted_mode->vdisplay = mode->vdisplay;
                }
+               adjusted_mode->base.id = mode_id;
        }
 }