aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/drm_modes.c28
-rw-r--r--drivers/gpu/drm/nouveau/nv50_dac.c7
-rw-r--r--drivers/gpu/drm/nouveau/nv50_sor.c7
-rw-r--r--include/drm/drm_crtc.h1
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 */
727void 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}
735EXPORT_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}
742EXPORT_SYMBOL(drm_mode_duplicate); 760EXPORT_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,
855extern int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid); 855extern int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid);
856extern void drm_mode_probed_add(struct drm_connector *connector, struct drm_display_mode *mode); 856extern void drm_mode_probed_add(struct drm_connector *connector, struct drm_display_mode *mode);
857extern void drm_mode_remove(struct drm_connector *connector, struct drm_display_mode *mode); 857extern void drm_mode_remove(struct drm_connector *connector, struct drm_display_mode *mode);
858extern void drm_mode_copy(struct drm_display_mode *dst, const struct drm_display_mode *src);
858extern struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev, 859extern 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);
860extern void drm_mode_debug_printmodeline(struct drm_display_mode *mode); 861extern void drm_mode_debug_printmodeline(struct drm_display_mode *mode);