diff options
-rw-r--r-- | drivers/gpu/drm/drm_modes.c | 28 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nv50_dac.c | 7 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nv50_sor.c | 7 | ||||
-rw-r--r-- | include/drm/drm_crtc.h | 1 |
4 files changed, 28 insertions, 15 deletions
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c index 7ff13bc47ca..b7adb4a967f 100644 --- a/drivers/gpu/drm/drm_modes.c +++ b/drivers/gpu/drm/drm_modes.c | |||
@@ -714,6 +714,27 @@ EXPORT_SYMBOL(drm_mode_set_crtcinfo); | |||
714 | 714 | ||
715 | 715 | ||
716 | /** | 716 | /** |
717 | * drm_mode_copy - copy the mode | ||
718 | * @dst: mode to overwrite | ||
719 | * @src: mode to copy | ||
720 | * | ||
721 | * LOCKING: | ||
722 | * None. | ||
723 | * | ||
724 | * Copy an existing mode into another mode, preserving the object id | ||
725 | * of the destination mode. | ||
726 | */ | ||
727 | void drm_mode_copy(struct drm_display_mode *dst, const struct drm_display_mode *src) | ||
728 | { | ||
729 | int id = dst->base.id; | ||
730 | |||
731 | *dst = *src; | ||
732 | dst->base.id = id; | ||
733 | INIT_LIST_HEAD(&dst->head); | ||
734 | } | ||
735 | EXPORT_SYMBOL(drm_mode_copy); | ||
736 | |||
737 | /** | ||
717 | * drm_mode_duplicate - allocate and duplicate an existing mode | 738 | * drm_mode_duplicate - allocate and duplicate an existing mode |
718 | * @m: mode to duplicate | 739 | * @m: mode to duplicate |
719 | * | 740 | * |
@@ -727,16 +748,13 @@ struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev, | |||
727 | const struct drm_display_mode *mode) | 748 | const struct drm_display_mode *mode) |
728 | { | 749 | { |
729 | struct drm_display_mode *nmode; | 750 | struct drm_display_mode *nmode; |
730 | int new_id; | ||
731 | 751 | ||
732 | nmode = drm_mode_create(dev); | 752 | nmode = drm_mode_create(dev); |
733 | if (!nmode) | 753 | if (!nmode) |
734 | return NULL; | 754 | return NULL; |
735 | 755 | ||
736 | new_id = nmode->base.id; | 756 | drm_mode_copy(nmode, mode); |
737 | *nmode = *mode; | 757 | |
738 | nmode->base.id = new_id; | ||
739 | INIT_LIST_HEAD(&nmode->head); | ||
740 | return nmode; | 758 | return nmode; |
741 | } | 759 | } |
742 | EXPORT_SYMBOL(drm_mode_duplicate); | 760 | EXPORT_SYMBOL(drm_mode_duplicate); |
diff --git a/drivers/gpu/drm/nouveau/nv50_dac.c b/drivers/gpu/drm/nouveau/nv50_dac.c index a0f2bebf49e..55c56330be6 100644 --- a/drivers/gpu/drm/nouveau/nv50_dac.c +++ b/drivers/gpu/drm/nouveau/nv50_dac.c | |||
@@ -190,11 +190,8 @@ nv50_dac_mode_fixup(struct drm_encoder *encoder, struct drm_display_mode *mode, | |||
190 | } | 190 | } |
191 | 191 | ||
192 | if (connector->scaling_mode != DRM_MODE_SCALE_NONE && | 192 | if (connector->scaling_mode != DRM_MODE_SCALE_NONE && |
193 | connector->native_mode) { | 193 | connector->native_mode) |
194 | int id = adjusted_mode->base.id; | 194 | drm_mode_copy(adjusted_mode, connector->native_mode); |
195 | *adjusted_mode = *connector->native_mode; | ||
196 | adjusted_mode->base.id = id; | ||
197 | } | ||
198 | 195 | ||
199 | return true; | 196 | return true; |
200 | } | 197 | } |
diff --git a/drivers/gpu/drm/nouveau/nv50_sor.c b/drivers/gpu/drm/nouveau/nv50_sor.c index 9a5c2c98658..a7844ab6a50 100644 --- a/drivers/gpu/drm/nouveau/nv50_sor.c +++ b/drivers/gpu/drm/nouveau/nv50_sor.c | |||
@@ -342,11 +342,8 @@ nv50_sor_mode_fixup(struct drm_encoder *encoder, struct drm_display_mode *mode, | |||
342 | } | 342 | } |
343 | 343 | ||
344 | if (connector->scaling_mode != DRM_MODE_SCALE_NONE && | 344 | if (connector->scaling_mode != DRM_MODE_SCALE_NONE && |
345 | connector->native_mode) { | 345 | connector->native_mode) |
346 | int id = adjusted_mode->base.id; | 346 | drm_mode_copy(adjusted_mode, connector->native_mode); |
347 | *adjusted_mode = *connector->native_mode; | ||
348 | adjusted_mode->base.id = id; | ||
349 | } | ||
350 | 347 | ||
351 | return true; | 348 | return true; |
352 | } | 349 | } |
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 53cb49a13e1..9595c2c9adc 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h | |||
@@ -855,6 +855,7 @@ extern struct edid *drm_get_edid(struct drm_connector *connector, | |||
855 | extern int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid); | 855 | extern int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid); |
856 | extern void drm_mode_probed_add(struct drm_connector *connector, struct drm_display_mode *mode); | 856 | extern void drm_mode_probed_add(struct drm_connector *connector, struct drm_display_mode *mode); |
857 | extern void drm_mode_remove(struct drm_connector *connector, struct drm_display_mode *mode); | 857 | extern void drm_mode_remove(struct drm_connector *connector, struct drm_display_mode *mode); |
858 | extern void drm_mode_copy(struct drm_display_mode *dst, const struct drm_display_mode *src); | ||
858 | extern struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev, | 859 | extern struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev, |
859 | const struct drm_display_mode *mode); | 860 | const struct drm_display_mode *mode); |
860 | extern void drm_mode_debug_printmodeline(struct drm_display_mode *mode); | 861 | extern void drm_mode_debug_printmodeline(struct drm_display_mode *mode); |